通过值获取字典中的键
我写了一个函数,可以在一个字典
里查找年龄,并显示匹配的名字:
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
错误。我知道这样写不对,但我不知道怎么才能让它反向查找。
43 个回答
356
如果你想同时获取名字和年龄,应该使用 .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()
而不是 .items()
,就像 Cat Plus Plus 在他的回答中提到的那样,因为这样不需要复制列表。
970
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()
的更多信息,可以查看这个链接:我该如何从字典中获取值的列表?
698
没有这样的东西。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)