[英]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.