从Python中的输入无法找到字典中是否存在值

时间:2019-03-13 20:31:05

标签: 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

关于此问题,我还看到了其他一些问题,但它们似乎比我的还要复杂。我是一个初学者,我的代码始终返回“未找到”。

2 个答案:

答案 0 :(得分:0)

这实际上是您要寻找的

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'],则由于它不是完全匹配,它将被评估为false。 ,字典键中的值是列表列表,而不是1级列表,例如:

dict_values([['text'], .... ['textn']])

使条件为:

'word' in [[...], ..., [..]]

这将永远不匹配。

您需要一个辅助项来在与find组合的子列表之间进行迭代,以在另一个给定字符串中查找字符串序列,因为子列表中的项目是完整的行,允许部分匹配。

答案 1 :(得分:0)

您应该使用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")