首页 > 解决方案 > 试图通过嵌套的字典来理解搜索

问题描述

我有一个存储在嵌套中的联系信息列表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():会查看值和键。为什么不呢?我该如何解决这个问题?

标签: pythonpython-3.xdictionary

解决方案


当你这样做时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正在检查子字符串,而不是完全匹配


推荐阅读