Python 使用列表中的值查找字典键
我正在寻找一个排序列表,其中只包含字典中的键,这些键的值==到列表的int 我怎么得到它 我已经对字典中的值进行了排序,但现在不知道如何使用值列表对键进行排序 我需要这样的输出: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
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
inbuildargsort
将生成可用于对键进行排序的排序参数
>>> 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']