在字典中按值获取键

2024-04-26 00:10:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我制作了一个函数,它将在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。我知道这不正确,但我不知道如何让它向后搜索


Tags: 函数namein名称forinputagesearch
3条回答

如果您想要名称年龄,您应该使用.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

<>最后,如果^ {}很长,并且你在Python 2上,你应该考虑使用^ {CD9>}而不是^ {},因为他的答案是CAT Plus Plus,因为它不需要复制列表。

没有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)
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()的更多信息:How can I get list of values from dict?

相关问题 更多 >

    热门问题