Python 使用列表中的值查找字典键

Python 使用列表中的值查找字典键,python,list,sorting,dictionary,Python,List,Sorting,Dictionary,我正在寻找一个排序列表,其中只包含字典中的键,这些键的值==到列表的int 我怎么得到它 我已经对字典中的值进行了排序,但现在不知道如何使用值列表对键进行排序 我需要这样的输出: diz = {'KTOP': 1194654, 'WDFR': 1217, 'WKLJ': 1306, 'MLKJ': 2958} list = [1217, 1306, 2958, 1194654] 使用: 印刷品: diz = {'KTOP': 1194654, 'WDFR': 1217, 'WKLJ': 13

我正在寻找一个排序列表,其中只包含字典中的键,这些键的值==到列表的int

我怎么得到它

我已经对字典中的值进行了排序,但现在不知道如何使用值列表对键进行排序

我需要这样的输出:

diz = {'KTOP': 1194654, 'WDFR': 1217, 'WKLJ': 1306, 'MLKJ': 2958}

list = [1217, 1306, 2958, 1194654]
使用:

印刷品:

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]

如果在dict中重复值,上述代码将失败(通常情况下,只有键在dict中被取消,而不是值。)

使用:

首先,仅当
值(=diz[key])
位于
l1
中时,才从
diz
中创建一个包含
键的列表
d
。 现在创建一个映射
sort\u键
从值到l1中的索引,l1中的值索引将用于对
d
进行排序。 现在使用
sort\u键中的键对
d
进行排序

>>> new_list
['WDFR', 'WKLJ', 'MLKJ', 'KTOP']
印刷品

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

您可以将字典中的值与列表中的项目进行交叉检查。我还强烈建议使用内置的
列表
以外的变量名

diz={'KTOP':1194654,'WDFR':1217,'WKLJ':1306,'MLKJ':2958}
mylist=[1217130629581194654]
值=设置(mylist)
输出=[键对应键,diz.items中的值()如果值对应值]

请注意,我将列表项保存在一个集合中,这允许快速(即O(1))查找。

关于使用
内置python
功能,您可以参考答案。对于其他方法,您可以参考此方法

逻辑:

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()))])
Numpy
inbuild
argsort
将生成可用于对键进行排序的排序参数

>>> new_list
['WDFR', 'WKLJ', 'MLKJ', 'KTOP']
代码:

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()))])
输出:

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()))])

您将能够使用此一行程序获得所需的输出:


[键对键,diz.items中的值()如果mylist中的值]

我认为只有你的答案是正确的,因为如果值重复,我的答案可能会失败。@AmitVikramSingh你说得对,但不是创建d作为
dict
对象,请键入创建一个两个值的
列表这可以解决这个问题
d作为列表的两个值可以是
的任何格式。[v,k]对于diz.items()中的k,v]
嘿,谢谢您的回答!你能解释一下你的代码是如何工作的,为什么工作的,并解决这个问题吗?对于没有经验的用户来说,纯代码的答案通常很难理解。我做了一个简单的循环,并将其转换为一个定义listReady=[],用于diz.items()中的键和值:if list中的值:listReady.append(key)print(listReady)
['WDFR', 'WKLJ', 'MLKJ', 'KTOP']