[英]Find dictionary keys using values from a list
diz = {'KTOP': 1194654, 'WDFR': 1217, 'WKLJ': 1306, 'MLKJ': 2958}
list = [1217, 1306, 2958, 1194654]
我正在尋找一個排序列表,其中僅包含我的字典的鍵,這些鍵的值 == 到我的列表的 int。
我如何得到它?
我已經對字典的值進行了排序,但現在我不知道如何使用值列表對鍵進行排序。
我需要這樣的 output:
lOutput = [ 'WDFR', 'WKLJ', 'MLKJ' , 'KTOP' ]
利用:
diz = {'KTOP': 1194654, 'WDFR': 1217, 'WKLJ': 1306, 'MLKJ': 2958}
l1 = [1217, 1306, 2958, 1194654]
d = {v:k for k, v in diz.items()}
new_list = [d[k] for k in l1 if k in d]
印刷:
>>> new_list
['WDFR', 'WKLJ', 'MLKJ', 'KTOP']
如果在 dict 中重復值,上面的代碼將失敗(通常是這種情況,因為在 dict 中只有鍵而不是值。)
利用:
首先創建一個列表d
,其中僅當value(=diz[key])
在l1
中時才包含來自diz
的key
。 現在創建一個 map sort_key
從值到它在 l1 中的索引,l1 中的值索引將用於對d
進行排序。 現在使用sort_key
中的鍵對d
進行排序。
d = [k for k, v in diz.items() if v in set(l1)]
sort_key = {k: v for v, k in enumerate(l1)}
new_list = list(sorted(d, key = lambda x: sort_key[diz[x]]))
印刷
>>> new_list
['WDFR', 'WKLJ', 'MLKJ', 'KTOP']
要使用Inbuilt-python
功能,您可以參考Amit Vikram Singh的答案。 其他方法可以參考這個方法。
邏輯:
Numpy
內置argsort
將產生可用於對鍵進行排序的排序參數。
np.argsort(list(diz.values()))
代碼:
import numpy as np
diz = {'KTOP': 1194654, 'WDFR': 1217, 'WKLJ': 1306, 'MLKJ': 2958}
keys = list(diz.keys())
print([keys[i] for i in np.argsort(list(diz.values()))])
OUTPUT:
['WDFR', 'WKLJ', 'MLKJ', 'KTOP']
您可以將字典中的值與列表中的項目進行交叉檢查。 我還強烈建議使用內置list
以外的變量名。
diz = {'KTOP': 1194654, 'WDFR': 1217, 'WKLJ': 1306, 'MLKJ': 2958}
mylist = [1217, 1306, 2958, 1194654]
values = set(mylist)
output = [key for key, value in diz.items() if value in values]
請注意,我將列表項保存在一組中,這允許快速(即O(1) )查找。
您將能夠獲得您想要的 output 與這一個班輪:
[key for key, value in diz.items() if value in mylist]
diz = {'KTOP': 1194654, 'WDFR': 1217, 'WKLJ': 1306, 'MLKJ': 2958}
list = [1217, 1306, 2958, 1194654]
def find_the_same(list, set):
listReady = []
for key, value in set.items():
if value in list:
listReady.append(key)
return listReady
print(find_the_same(list, diz))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.