我做了一个函数,它将在字典中查找年龄并显示匹配的名字:
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。我知道这是不正确的,但我不知道如何让它向后搜索。
我瞥见所有的答案,没有提到简单地使用列表理解?
这个Python的单行解决方案可以返回任意数量的给定值的所有键(在Python 3.9.1中测试):
>>> dictionary = {'george' : 16, 'amber' : 19, 'frank': 19}
>>>
>>> age = 19
>>> name = [k for k in dictionary.keys() if dictionary[k] == age]; name
['george', 'frank']
>>>
>>> age = (16, 19)
>>> name = [k for k in dictionary.keys() if dictionary[k] in age]; name
['george', 'amber', 'frank']
>>>
>>> age = (22, 25)
>>> name = [k for k in dictionary.keys() if dictionary[k] in age]; name
[]
这是一个奇怪的问题,因为第一条评论就给出了完美的答案。
根据样例提供的数据示例
dictionary = {'george': 16, 'amber': 19}
print(dictionary["george"])
它返回
16
所以你想要相反的结果
输入“16”,得到“george”
简单地交换键值和presto
dictionary = {'george': 16, 'amber': 19}
inv_dict = {value:key for key, value in dictionary.items()}
print(inv_dict[16])
我处于完全相反的位置,因为我有一本字典
{16:'george', 19:'amber'}
我试着喂"乔治"然后得到16个…我尝试了几种循环和迭代器,OK..他们工作,但它不是简单的一行解决方案,我将使用快速结果…所以我简单地交换了解。
如果我错过了什么,请让我知道删除我的答案。
这是你访问字典做你想做的事情的方式:
list = {'george': 16, 'amber': 19}
search_age = raw_input("Provide age")
for age in list:
if list[age] == search_age:
print age
当然,你们的名字太离谱了,看起来像是要打印一个年龄,但它确实打印了名字。因为你是通过名字来访问的,所以如果你这样写会更容易理解:
list = {'george': 16, 'amber': 19}
search_age = raw_input("Provide age")
for name in list:
if list[name] == search_age:
print name
更好的是:
people = {'george': {'age': 16}, 'amber': {'age': 19}}
search_age = raw_input("Provide age")
for name in people:
if people[name]['age'] == search_age:
print name
正如有人提到的,可能有多个键具有相同的值,如下面的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。