我做了一个函数,它将在字典中查找年龄并显示匹配的名字:
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。我知道这是不正确的,但我不知道如何让它向后搜索。
正如有人提到的,可能有多个键具有相同的值,如下面的my_dict。此外,可能没有匹配的键。
my_dict ={'k1':1,'k2':2, 'k3':1, 'k4':12, 'k5':1, 'k6':1, 'k7':12}
这里有三种找到钥匙的方法,一种用于最后一次敲击,两种用于第一次敲击。
def find_last(search_value:int, d:dict):
return [x for x,y in d.items() if y==search_value].pop()
def find_first1(search_value:int, d:dict):
return next(filter(lambda x: d[x]==search_value, d.keys()), None)
def find_first2(search_value:int, d:dict):
return next(x for x,y in d.items() if y==search_value)
在这些函数中,find_first1比其他函数快一点,如果没有匹配的键,它将返回None。
如果你想要名字和年龄,你应该使用.items(),它会给你key (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,你应该考虑使用.iteritems()而不是像Cat Plus Plus在他的回答中所做的那样使用.items(),因为它不需要复制列表。
在我的情况下,最简单的方法是实例化字典在你的代码,然后你可以从它调用键如下
这是我们班有字典
class Config:
def local(self):
return {
"temp_dir": "/tmp/dirtest/",
"devops": "Mansur",
}
实例化你的字典
config = vars.Config()
local_config = config.local()
最后调用你的字典键
patched = local_config.get("devops")