python - 试图通过嵌套的字典来理解搜索
问题描述
我有一个存储在嵌套中的联系信息列表dict
:
addressBook = {'Jim': {'name': 'James Marsh', 'address': '32 Morris Ave',
'phone': '654-987-3217'},
'Leanne': {'name': 'Leanne Moss', 'address': '37 Shamrock Lane',
'phone': '123-456-7890'},
'Chris': {'name': 'Christopher Philips', 'address': '49 Langley Court',
'phone': '321-654-9870'},
'Tim': {'name': 'Timothy Morris', 'address': '49 Langley Court',
'phone': '321-654-9870'}}
我正在尝试编写一个函数,该函数将在每个条目中搜索用户输入的搜索字符串。
def searchAllFields(addressBook):
searchString = input("Enter a string to search for (enter to cancel): ")
if searchString == "":
return
else:
for key, value in addressBook.items():
inside = False
for v in value.values():
if searchString in v:
inside = True
break
if searchString in key or inside:
print("The following contacts were found: ")
print(addressBook[key]['name'])
print(addressBook[key]['address'])
print(addressBook[key]['phone'] + '\n')
else:
print("No contact matching the string {} was found.".format(searchString))
return
我的函数很好地遍历字典,但它只在键中找到搜索字符串。例如,如果我的搜索字符串在 中Jim
,我可以找到 James 的信息,但如果我的搜索字符串是,Lang
我希望能够找到 Chris。我原以为这for key, value in addressBook.items():
会查看值和键。为什么不呢?我该如何解决这个问题?
解决方案
当你这样做时searchString in value
,你只是检查那个value
字典的键。
您需要第二个循环来检查嵌套字典的值
for key, value in addressBook.items():
inside = False
for v in value.values():
if searchString in v:
inside = True
break
if searchString in key or inside:
不相关的注释:searchString in key
正在检查子字符串,而不是完全匹配
推荐阅读
- sql-server - Application.CalculateUntilAsyncQueriesDonecode 阻止 Excel 中 SQL 查询的登录掩码
- json - 如何从以下 JSON 提要中获取电子邮件地址?
- java - Phoenix 在批量加载后显示空值而不是存储在 HBase 中的实际值
- flutter - Flutter 无法使用 dartdoc 生成文档
- r - 使用 mutate 进行索引
- angular - 自定义主题时如何知道要导入哪些样式文件?
- arduino - 为什么我的音频声音没有在我的 arduino 代码中播放,但是如果我单独播放它,它开始工作得很好
- react-native - 停止世博会后台位置更新会出现错误“找不到应用 ID 的任务'地理围栏'”
- python - 使用tastepie api的pre_save信号不允许我访问“实例”字段
- spring - 方法在基于 Redis 的 Tomcat 会话管理上抛出 java.io.EOFException