如何根据列表中的值获取作为字典值的列表?
问题描述:
我有以下的解释:如何根据列表中的值获取作为字典值的列表?
d = {'1' : [1, 2, 3, 4], '2' : [10, 20, 30, 40]}
我如何得到相应的键,我从列表中的一个值搜索? 比方说,我想关键的“1”,如果我在寻找价值3或键“2”如果我在寻找价值10
答
您可以使用一台发电机表达过滤条件,这样
>>> def get_key(d, search_value):
... return next(key for key, values in d.items() if search_value in values)
...
>>> get_key(d, 10)
'2'
>>> get_key(d, 2)
'1'
如果没有键包含正在搜索的值,则返回None
。
>>> get_key(d, 22)
None
答
可以扭转字典到这个结构做那种查找:
reverse_d = {
1: '1',
2: '1',
3: '1',
4: '1',
10: '2',
…
}
可以通过遍历每个键的每个值来构建:
reverse_d = {}
for key, values in d.items():
for value in values:
reverse_d[value] = key
或作为词典理解更简洁:
reverse_d = {value: key for key, values in d.items() for value in values}
查找现在很简单!
k = reverse_d[30]
# k = '2'
但是,如果您执行多个查找,只会提供比搜索整个原始字典更好的性能。
答
这是我第一次回答问题。这个方法怎么样?
def get_key(d,search_value):
res = []
for v in d.items():
if search_value in v[1]:
res.append(v[0])
return res
>>> D = {'a':[2,2,3,4,5],'b':[5,6,7,8,9]}
>>> getkey.get_key(D,2)
['a']
>>> getkey.get_key(D,9)
['b']
>>> getkey.get_key(D,5)
['a', 'b']
如果多个键匹配会怎样? – thefourtheye
情况并非如此。每个键代表字典中唯一的。 –
Binary
@二进制:键在字典中总是唯一的。重要的是如果列表*中的*值是唯一的。 –