通过字典值查找键在Python中

2 投票
3 回答
6567 浏览
提问于 2025-04-16 11:08
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

部分解决方案

names = {age:sorted([name for index,name in enumerate(NAMES) if age == AGES[index]]) for age in sorted(set(AGES))}
print(names)

返回结果:

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

如果你愿意,可以不使用sorted()。你也可以加上count(),这样返回的数据就会像

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

如果有3个Cathy和7个Dan。

虽然上面的代码看起来很简短,但我怀疑实际的for循环会对原始列表进行更少的迭代。

或者更好:

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)
0

我之前也遇到过类似的问题。这里有一个解决方案,它会把键和值以元组的形式返回一个数组。

filter(lambda (k,v): v==19, nameagedict.items())
9
print [key for (key,value) in nameagedict.items() if value == 19]

nameagedict.items() 这个命令会给你一个字典里所有项目的列表,每个项目都是一个包含键和值的组合,像这样(键,值)。

撰写回答