簡體   English   中英

從Python中的輸入無法找到字典中是否存在值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM