python - 无法从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']
,它将评估为 false,因为它不是完全匹配,最重要的是,您的字典键中的值是列表列表而不是1 级列表,例如:
dict_values([['text'], .... ['textn']])
导致条件为:
'word' in [[...], ..., [..]]
这永远不会匹配。
您需要一个辅助 for 在子列表中进行迭代,并find
在另一个给定字符串中查找字符串序列,因为子列表中的项目是完整的行,允许部分匹配。
推荐阅读
- flutter - 如何在 Dart/Flutter 的同一个类中获取默认构造函数和参数化构造函数?
- java - 尝试在 Eclipse 中使用处理时出错
- matlab - 基于数字创建多个矩阵/向量
- python - pyscreenshot.err.FailedBackendError:所有后端失败
- javascript - 如何使用 jest.fn() 模拟调度
- hibernate - JPA/Hibernate 中引用的不存在的表
- r - 在ggplot2中添加theme_void()后无法正确显示汉字
- mongodb - 从 MongoDB 获取两个地理位置之间的距离
- r - 使用调查包创建虚拟变量
- vue.js - 尽管 Babel Polyfill,Vue 无法在 IE11 中工作