dict = {“Liz”: 4, “Garry”: 4, “Barry”:6}
list1 = []
for m in sorted(result_dict, key=result_dict.get, reverse=True):
list1.append(m)
此后,我们有两个列表:
list1 = ["Barry","Liz", "Garry"]
list2 = [“Garry”, “Liz”, “Barry”]
我希望输出为-如果元素在dict中具有相同的值,则在list1中它们应按list2的顺序->例如,如果Garry在list2中排在首位,则在list1中他也应该排在“ Barry”之后:
list1 = ["Barry", "Garry", "Liz"]
答案 0 :(得分:0)
key
函数可以返回一个元组以打破平局。所以就你而言
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']
答案 1 :(得分:0)
您需要将当前密钥与第二个列表上的位置结合使用,例如:
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']
对于大型列表,此方法比使用list.index更快。实际上,调用索引会增加算法O(n*2)
的复杂度,因此阻碍使用字典的O(n*logn)
排序算法的预期复杂度将使其保持不变。