[英]Can't find if a value exists in a dictionary from input in Python
my_file = open("input.txt",'r')
d = {}
for line in my_file:
key = line[0]
if key not in d:
d[key] = [line.strip("\n")]
else:
d[key].append(line.strip("\n"))
for key in d:
print(key,d[key])
print("")
find_word = input("Search a word: ")
for value in d:
if find_word in d.values():
print("Word is found")
break
else:
print("Word not found")
break
我已經看到了有關此問題的其他一些問題,但它們似乎比我的還要復雜。 我是一個初學者,我的代碼始終返回“未找到”。
這實際上是您要尋找的
find_word = input("Search a word: ")
found = False
for _list in d.values():
for element in _list:
if element.find(find_word) != -1:
print('Found')
found = True
break
if found:
break
else:
print('Not found')
當您使用關鍵字in
執行它需要精確匹配搜索,因此,如果你做'test' in ['test2', 'test3']
它會評估為假,因為它不是完全匹配,在頂部這樣,字典鍵中的值是列表列表,而不是1級列表,例如:
dict_values([['text'], .... ['textn']])
使條件為:
'word' in [[...], ..., [..]]
這將永遠不會匹配。
您需要一個輔助項來在子列表之間進行迭代,並與在另一個給定字符串內查找字符串序列的find
結合使用,因為子列表中的項目是完整的行,允許部分匹配。
您應該使用d.values()
作為要在for
循環中迭代的列表。 然后測試搜索詞是否在每個列表中。
for word_list in d.values():
if find_word in word_list:
print("Word is found")
break
else:
print("Word is not found")
請注意, else:
打印未找到單詞的單詞不應在if
,而應在for
。 這樣,僅當詞典中的列表中都不包含該單詞時,它才會打印消息。 如果循環正常完成,則執行循環的else:
子句,而不是通過break
退出。
您還可以使用any()
函數:
if any(find_word in word_list for word_list in d.values()):
print("Word is found")
else:
print("Word is not found")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.