我有以下的解釋:如何根據列表中的值獲取作爲字典值的列表?
d = {'1' : [1, 2, 3, 4], '2' : [10, 20, 30, 40]}
我如何得到相應的鍵,我從列表中的一個值搜索? 比方說,我想關鍵的「1」,如果我在尋找價值3或鍵「2」如果我在尋找價值10
我有以下的解釋:如何根據列表中的值獲取作爲字典值的列表?
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
@二進制:鍵在字典中總是唯一的。重要的是如果列表*中的*值是唯一的。 –