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
关于此问题,我还看到了其他一些问题,但它们似乎比我的还要复杂。我是一个初学者,我的代码始终返回“未找到”。
答案 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")