我做了一个函数,可以在Dictionary
查询年龄并显示匹配的名称:
dictionary = {'george' : 16, 'amber' : 19}
search_age = raw_input("Provide age")
for age in dictionary.values():
if age == search_age:
name = dictionary[age]
print name
我知道如何比较和查找年龄,但我不知道如何显示此人的姓名。另外,由于第 5 行,我得到了KeyError
。我知道这是不正确的,但是我不知道如何使它向后搜索。
mydict = {'george': 16, 'amber': 19}
print mydict.keys()[mydict.values().index(16)] # Prints george
或在 Python 3.x 中:
mydict = {'george': 16, 'amber': 19}
print(list(mydict.keys())[list(mydict.values()).index(16)]) # Prints george
基本上,它将字典中的值分隔在一个列表中,找到您拥有的值的位置,并在该位置获取键。
有关 Python 3 中的keys()
和.values()
更多信息, 如何从 dict 中获取值列表?
空无一人。 dict
不能以这种方式使用。
dictionary = {'george': 16, 'amber': 19}
search_age = input("Provide age")
for name, age in dictionary.items(): # for name, age in dictionary.iteritems(): (for Python 2.x)
if age == search_age:
print(name)
如果同时需要名称和年龄,则应使用.items()
,它为您提供键(key, value)
元组:
for name, age in mydict.items():
if age == search_age:
print name
for
循环中将元组解压缩为两个单独的变量,然后匹配年龄。
如果您通常要按年龄查找,并且没有两个人具有相同的年龄,则还应该考虑反转字典:
{16: 'george', 19: 'amber'}
因此,您只需执行以下操作即可查找年龄段的名称
mydict[search_age]
我一直称其为mydict
而不是list
因为list
是内置类型的名称,并且您不应将此名称用作其他名称。
您甚至可以在一行中获得所有给定年龄的人的列表:
[name for name, age in mydict.items() if age == search_age]
或每个年龄段只有一个人:
next((name for name, age in mydict.items() if age == search_age), None)
如果没有那个年龄的人,这只会给您None
最后,如果dict
较长且您使用的是 Python 2,则应考虑使用.iteritems()
而不是 Cat Plus Plus 在其答案中所做.items()
列表。