I have the following dictionary :
d = {'1' : [1, 2, 3, 4], '2' : [10, 20, 30, 40]}
如何根据列表中的值查找对应的键? 比如说,如果我要查找值为3,我需要获取键'1',如果我要查找值为10,我需要获取键'2'。
I have the following dictionary :
d = {'1' : [1, 2, 3, 4], '2' : [10, 20, 30, 40]}
如何根据列表中的值查找对应的键? 比如说,如果我要查找值为3,我需要获取键'1',如果我要查找值为10,我需要获取键'2'。
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):
... 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
这是我第一次回答问题。这个方法怎么样?
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']