我创建了一个包含多个项目的列表。
例如:
highScoreList = [["Dummy1",40,50],["Dummy2",100,80],["Dummy3",100,90]]
我试图根据价值对此进行排序。首先,它应该按最大的第二个值排序(这里:100大于40)。
如果某些元素具有相同的第二个元素(此处:100和100),我仍然希望使用第3个元素对它们进行排序。第3个元素越小,它应该排名越高(这里:80小于90)。
结果应为:
Dummy2 100
Dummy3 100
Dummy1 40
我过去为一组仅使用1分值编写了一些类似的代码。
def printHighScoreList():
descender = ((key,highScoreList[key]) for key in sorted(highScoreList,key=highScoreList.get, reverse=True))
for key, value in descender:
print(key, value)
答案 0 :(得分:2)
在第三个元素上按升序对列表进行排序,然后根据列表的第二个元素按降序对结果列表进行排序。演示:
>>> highScoreList = [["Dummy1",40,50],["Dummy2",100,80],["Dummy3",100,90]]
>>> sorted(sorted(highScoreList, key=lambda x:x[2]),key=lambda x:x[1],reverse=True)
[['Dummy2', 100, 80], ['Dummy3', 100, 90], ['Dummy1', 40, 50]]
答案 1 :(得分:1)
使用复合键进行排序。由于您希望基于第一个索引反向排序列表列表,因此在使用第二个索引时反转第一个索引的键:
highScoreList.sort(key=lambda x: (-x[1], x[2]))
highScoreList
现已正确排序:
[['Dummy2', 100, 80], ['Dummy3', 100, 90], ['Dummy1', 40, 50]]
虽然来自@ BHATIRSHAD的答案的双重排序方法需要3.39us(在我的机器上列出10k循环的列表),但上述方法仅需1.5us。