2016-11-14 145 views
3

我有以下的解釋:如何根據列表中的值獲取作爲字典值的列表?

d = {'1' : [1, 2, 3, 4], '2' : [10, 20, 30, 40]} 

我如何得到相應的鍵,我從列表中的一個值搜索? 比方說,我想關鍵的「1」,如果我在尋找價值3或鍵「2」如果我在尋找價值10

+1

如果多個鍵匹配會怎樣? – thefourtheye

+0

情況並非如此。每個鍵代表字典中唯一的。 – Binary

+0

@二進制:鍵在字典中總是唯一的。重要的是如果列表*中的*值是唯一的。 –

回答

4

您可以使用一臺發電機表達過濾條件,這樣

>>> 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 
5

可以扭轉字典到這個結構做那種查找:

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' 

但是,如果您執行多個查找,只會提供比搜索整個原始字典更好的性能。

1

這是我第一次回答問題。這個方法怎麼樣?

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']