通过值获取字典中的键

962 投票
43 回答
2555299 浏览
提问于 2025-04-17 05:43

我写了一个函数,可以在一个字典里查找年龄,并显示匹配的名字:

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)

撰写回答