我做了一个函数,它将在字典中查找年龄并显示匹配的名字:

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。我知道这是不正确的,但我不知道如何让它向后搜索。


当前回答

一行版本:(i是旧字典,p是反向字典)

解释:i.keys()和i.values()返回两个列表,分别包含字典的键和值。zip函数能够将列表绑定在一起以生成字典。

p = dict(zip(i.values(),i.keys()))

警告:只有当值是可哈希且唯一时,此方法才有效。

其他回答

没有。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)
get_key = lambda v, d: next(k for k in d if d[k] is v)

一行版本:(i是旧字典,p是反向字典)

解释:i.keys()和i.values()返回两个列表,分别包含字典的键和值。zip函数能够将列表绑定在一起以生成字典。

p = dict(zip(i.values(),i.keys()))

警告:只有当值是可哈希且唯一时,此方法才有效。

考虑使用Pandas。正如William McKinney的《Python for Data Analysis》中所述

另一种考虑级数的方法是固定长度的有序级数 Dict,因为它是索引值到数据值的映射。它可以是 在很多情况下,你可能会用到字典。

import pandas as pd
list = {'george':16,'amber':19}
lookup_list = pd.Series(list)

要查询您的系列,请执行以下操作:

lookup_list[lookup_list.values == 19]

收益率:

Out[1]: 
amber    19
dtype: int64

如果您需要对输出进行任何其他转换 回答成一个列表可能有用:

answer = lookup_list[lookup_list.values == 19].index
answer = pd.Index.tolist(answer)
a = {'a':1,'b':2,'c':3}
{v:k for k, v in a.items()}[1]

或更好的

{k:v for k, v in a.items() if v == 1}