通过Python的dict中的值查找键

时间:2011-02-03 03:09:06

标签: python dictionary

NAMES  =  ['Alice', 'Bob','Cathy','Dan','Ed','Frank',
           'Gary','Helen','Irene','Jack', 'Kelly','Larry'] 
AGES  =  [20,21,18,18,19,20,20,19,19,19,22,19]

def nameage(a,b):
    nameagelist = [x for x in zip(a,b)]
    nameagedict = dict(nameagelist)

    return nameagedict

def name(a):
    for x in nameage(NAMES,AGES):
        if a in nameage(NAMES,AGES).values():
            print nameage(NAMES,AGES).keys()

print name(19)

我正在尝试返回19岁的人的姓名。如何按价值搜索字典并返回密钥?

3 个答案:

答案 0 :(得分:9)

print [key for (key,value) in nameagedict.items() if value == 19]

nameagedict.items()为您提供字典中所有项目的列表,作为(键,值)元组。

答案 1 :(得分:0)

我有类似的问题。这是我的解决方案,它将键和值作为元组数组返回。

filter(lambda (k,v): v==19, nameagedict.items())

答案 2 :(得分:0)

部分解决方案

{18: ['Cathy', 'Dan'], 19: ['Ed', 'Helen', 'Irene', 'Jack', 'Larry'], 20: ['Alice', 'Frank', 'Gary'], 21: ['Bob'], 22: ['Kelly']}

返回:

{18: [('Cathy',3), ('Dan',7), ...} 

如果您愿意,请留出已排序的()。您还可以添加count(),以便返回类似

的数据
def names(age):
    index = 0
    while index < len(AGES):
        if AGES[index] == age:
            yield NAMES[index]
        index += 1

print('19 year olds')
for name in names(19):
    print(name)

如果有3个Cathys和7个Dans。

虽然上面看起来很简短但我怀疑实际的for循环会比原始列表更少。

甚至更好:

undefined