Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:按第二个列表的元素对第一个列表的元素进行排序_Python - Fatal编程技术网

Python:按第二个列表的元素对第一个列表的元素进行排序

Python:按第二个列表的元素对第一个列表的元素进行排序,python,Python,之后,我们有两个列表: dict = {“Liz”: 4, “Garry”: 4, “Barry”:6} list1 = [] for m in sorted(result_dict, key=result_dict.get, reverse=True): list1.append(m) 我希望输出像这样-如果元素在dict中有相同的值,在list1中它们应该按照list2的顺序->例如,如果Garry在list2中是第一个,在list1中他也应该在“Barry”之后是第一个: 键函数

之后,我们有两个列表:

dict = {“Liz”: 4, “Garry”: 4, “Barry”:6}
list1 = []
for m in sorted(result_dict, key=result_dict.get, reverse=True):
    list1.append(m)
我希望输出像这样-如果元素在dict中有相同的值,在list1中它们应该按照list2的顺序->例如,如果Garry在list2中是第一个,在list1中他也应该在“Barry”之后是第一个:


函数可以返回一个元组来打破关系。那么你的情况呢

list1 = ["Barry", "Garry", "Liz"]
将打印

d = {"Liz": 4, "Garry": 4, "Barry": 6}
list2 = ["Garry", "Liz", "Barry"]
list1 = sorted(d, key=lambda x: (d.get(x), -list2.index(x)), reverse=True)
print(list1)

您需要将当前关键点与第二个列表中的位置组合用作关键点,如下所示:

['Barry', 'Garry', 'Liz']
输出

dict = {'Liz': 4, 'Garry': 4, 'Barry': 6}
list2 = ['Garry', 'Liz', 'Barry']

dict2 = {key: i for i, key in enumerate(list2)}

list1 = sorted(dict, key=lambda x: (dict.get(x), -1*dict2.get(x)), reverse=True)

print(list1)

对于大型列表,此方法比使用更快速。事实上,调用索引将使算法的复杂性
O(n*2)
因此阻碍排序算法的预期复杂性,即
O(n*logn)
使用字典将保持不变。

在您的输出示例中,Garry是第二位的,我不确定这两个列表来自何处…?!另外,请仔细检查变量名<代码>顺序,
顺序
指令
结果
…?!而且,
order=sorted(…)
也可以;无需迭代排序的
项附加到列表中。对不起,我编辑了这个问题
dict = {'Liz': 4, 'Garry': 4, 'Barry': 6}
list2 = ['Garry', 'Liz', 'Barry']

dict2 = {key: i for i, key in enumerate(list2)}

list1 = sorted(dict, key=lambda x: (dict.get(x), -1*dict2.get(x)), reverse=True)

print(list1)
['Barry', 'Garry', 'Liz']