python字典怎么根据值返回键_python – 按字典中的值返回键

返回第一个匹配键:

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, v in input_dict.items() if v == value), None)

...

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

2

>>> find_key({1:'a', 2:'b', 3:'c', 4:'d'}, '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', 2:'b', 3:'c', 4:'d'}, 'b')

set([2])

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

set([2, 5])

>>> find_key({1:'a', 2:'b', 3:'c', 4:'d'}, '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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值