Python:迭代字典时出现的问题

Python:迭代字典时出现的问题,python,python-3.x,Python,Python 3.x,因此,我一直在编写这个简单的Python程序,以熟悉字典。基本上,它是一个数据库,你可以在里面搜索。如果您的条目位于dictionary键中,则会显示有关该条目的信息 Family = {'Jim' : ['cool guy', 'has facial hair'], 'Ned' : ['hot stuff', ' wears Tees']} query = input("Look up database on whom? > ") for (name, info)

因此,我一直在编写这个简单的Python程序,以熟悉字典。基本上,它是一个数据库,你可以在里面搜索。如果您的条目位于dictionary键中,则会显示有关该条目的信息

Family = {'Jim' : ['cool guy', 'has facial hair'],
          'Ned' : ['hot stuff', ' wears Tees']}

query = input("Look up database on whom? > ")
for (name, info) in Family.items():
    if name in query or name.lower() in query:
        print("{} is {}".format(name, info))
这是有效的。然而,当我试图添加一个ELSE子句来处理不存在的条目时,我得到了这个结果

else:
    print ('Value not found!')
它打印未找到的值!在提出价值之前,已经有很多次了。如果我尝试添加“返回开始”函数,它甚至不会显示注册值。我知道这是因为它是一个循环,一个接一个地迭代dict;吉姆是真的,内德是假的


如何改进此代码以使其正确:-能够给出关于不存在的条目的错误,然后重新启动程序。谢谢。

您需要注意代码中的大小写不敏感。在继续之前,遍历列表以确保名称存在:

Family = {'Jim' : ['cool guy', 'has facial hair'],
          'Ned' : ['hot stuff', ' wears Tees']}

names = [name.lower() for name in Family]
def find(query):
    if query.lower() in names:
        info = [Family[n] for n in Family if n.lower() == query.lower()]
        print('{} is {}'.format(
            query, info
        ))
    else:
        print('{} not found'.format(query))
如果您尝试使用以下示例:

find('Ned')
find('ned')
find('no ned')
您将获得以下结果:

Ned is [['hot stuff', ' wears Tees']]
ned is [['hot stuff', ' wears Tees']]
no ned not found

这是一种方法:

Family = {'Jim' : ['cool guy', 'has facial hair'],
          'Ned' : ['hot stuff', ' wears Tees']}

query = input("Look up database on whom? > ")
if query in Family.keys():
    for (name, info) in Family.items():
        if name in query or name.lower() in query:
            print("{} is {}".format(name, info))
else:
    print "Print Something - Not in Family"

您的else缩进是否与的
相同?看起来它是
。不,它与
缩进。如果
谢谢,我发现这个答案最容易理解。我刚刚将
if query in Family.keys():
更改为
if query.capitalize()in Family.keys():
以允许小写的entries太好了,我很乐意提供帮助!