Python:迭代字典时的问题

时间:2015-06-09 04:19:41

标签: python python-3.x

所以,我一直在研究这个简单的Python程序,以熟悉字典。基本上,它可以作为您可以搜索的数据库。如果您的条目在字典键中,它会显示有关条目的信息。

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;所以像1)jim是真的然后2)ned是假的。

如何改进此代码以使其成为:-able提供有关不存在的条目的错误,然后重新启动程序。感谢。

2 个答案:

答案 0 :(得分:1)

您需要在代码中处理不区分大小写的问题。在继续之前,遍历列表以确保名称存在:

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

答案 1 :(得分:0)

这是一种方法:

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"