加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 按字典中的值返回键

发布时间:2020-12-20 12:40:40 所属栏目:Python 来源:网络整理
导读:参见英文答案 Inverse dictionary lookup in Python????????????????????????????????????14个 我试图在给定值的字典中返回密钥 在这种情况下如果’b’在字典中,我希望它返回’b’所在的键(即2) def find_key(input_dict,value): if value in input_dict.val
参见英文答案 > Inverse dictionary lookup in Python????????????????????????????????????14个
我试图在给定值的字典中返回密钥

在这种情况下如果’b’在字典中,我希望它返回’b’所在的键(即2)

def find_key(input_dict,value):
    if value in input_dict.values():
        return UNKNOWN            #This is a placeholder
    else:
        return "None"

print(find_key({1:'a',2:'b',3:'c',4:'d'},'b'))

我想得到的答案是关键2,但我不确定要放什么以获得答案,任何帮助将不胜感激

解决方法

返回第一个匹配键:

def find_key(input_dict,value):
    return next((k for k,v in input_dict.items() if v == value),None)

将所有匹配的键作为一组返回:

def find_key(input_dict,value):
    return {k for k,v in input_dict.items() if v == value}

字典中的值不一定是唯一的.如果没有匹配,则第一个选项返回None,第二个选项返回该情况的空集.

由于字典的顺序是任意的(取决于使用的键和插入和删除历史),所以被认为是“第一”键也是任意的.

演示:

>>> def find_key(input_dict,value):
...     return next((k for k,None)
... 
>>> find_key({1:'a','b')
2
>>> find_key({1:'a','z') is None
True
>>> def find_key(input_dict,value):
...     return {k for k,v in input_dict.items() if v == value}
... 
>>> find_key({1:'a','b')
set([2])
>>> find_key({1:'a',4:'d',5:'b'},'b')
set([2,5])
>>> find_key({1:'a','z')
set([])

请注意,每次需要搜索匹配的键时,我们都需要循环遍历值.这不是最有效的方法,特别是如果您需要经常将值与键匹配.在这种情况下,创建一个反向索引:

from collections import defaultdict

values_to_keys = defaultdict(set)

for key,value in input_dict:
    values_to_keys[value].add(key)

现在你可以直接在O(1)(常数)时间内询问这组键:

keys = values_to_keys.get(value)

这使用集合;字典也没有排序,所以集合在这里更有意义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读