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