2014-11-22 82 views
2

我創建了一個包含多個項目的列表。按價值排序Python中的多個項目列表

例如:

highScoreList = [["Dummy1",40,50],["Dummy2",100,80],["Dummy3",100,90]] 

我試圖理清此基礎上值。首先它應該按最大的第二個值排序(這裏:100大於40)。

如果有一些元素具有相同的第二個元素(這裏是:100和100),我仍然想使用第三個元素對它們進行排序。第三個元素越小,應該排名越高(這裏: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) 
+1

這不是一套。這是一個列表清單。集合用大括號表示:'{1,2,3}'。 – iCodez 2014-11-22 16:56:41

+0

@iCodez你完全正確。對不起,我很困惑。更新我的問題。謝謝! – 2014-11-22 17:07:26

回答

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。

2

排序列表中第三元件上按升序排列,然後在排序基於該列表的第二元件上decending順序結果的列表。演示:

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