协慌网

登录 贡献 社区

通过字典中的值获取键

我做了一个函数,可以在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()列表。