簡體   English   中英

如何根據值列表的匹配從Python字典中檢索值

[英]How to retrieve value from Python dictionary based upon match of list of values

我有以下dict,並希望根據值列表從中獲取鍵:

d = {
'Mot': [5250, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'Dek': [0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'Nas': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'Ost': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'Suk': [0, 0, 0, 0, 0, 0, 0, 3156, 1320, 450, 0, 0, 0],
'Tas': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0],
'Sat': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6551, 5000]
}
    dz = [[5250, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

我嘗試采用get()方法沒有成功(返回此錯誤:unhashable類型:'list';當我嘗試使用numpy的數組而不是返回:unhashable類型:'numpy.ndarray'時,也發生了同樣的情況):

tN= []
for index, element in enumerate(dz):
    tN.append(dict((v,k) for k,v in dict_res.items()).get(element))

有什么辦法可以像這樣從字典中檢索值嗎?

您可以執行以下操作:

d = {
'Mot': [5250, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'Dek': [0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'Nas': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'Ost': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'Suk': [0, 0, 0, 0, 0, 0, 0, 3156, 1320, 450, 0, 0, 0],
'Tas': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0],
'Sat': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6551, 5000]
}

dz = [[5250, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

keys = [key for elem in dz for key, value in d.items() if elem==value]
print(keys)

輸出:

['Mot', 'Dek']

更新:

修改的代碼,以便您獲得正確的鍵順序。 的情況下:

dz = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6551, 5000],
    [5250, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

輸出為:

['Sat', 'Mot', 'Dek']

不幸的是,Vasilis G.在上面發布的解決方案對返回的值進行了重新排序,以便在遇到以下情況時:

dz = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6551, 5000],
    [5250, 1085, 1085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

它輸出:

['Mot', 'Dek', 'Sat']

對於需要知道列表中值的真實順序的情況,這可能是一個更好的選擇:

keys = []
for i in dz:
    keys.append(list(d.keys())[list(d.values()).index(i)])
#using list comprehension:
#keys = [list(d.keys())[list(d.values()).index(i)] for i in dz]

print(keys)

它打印:

['Sat', 'Mot', 'Dek']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM