簡體   English   中英

使用列表中的值查找字典鍵

[英]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中時才包含來自dizkey 現在創建一個 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.

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