按值列出Python中多个项目的列表

时间:2014-11-22 16:55:57

标签: python list

我创建了一个包含多个项目的列表。

例如:

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)

2 个答案:

答案 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。