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岁的人的姓名。如何按价值搜索字典并返回密钥?
答案 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