[英]Order list of multiple items in Python by value
我創建了一個包含多個項目的列表。
例如:
highScoreList = [["Dummy1",40,50],["Dummy2",100,80],["Dummy3",100,90]]
我正在嘗試根據值對它進行排序。 首先,它應按最大的第二個值排序(此處:100大於40)。
如果有些元素具有相同的第二個元素(此處為100和100),我仍然想使用第三個元素對它們進行排序。 第三個元素越小,其排名應該越高(此處:80小於90)。
結果應為:
Dummy2 100
Dummy3 100
Dummy1 40
我過去只為一個得分值編寫了一組類似的代碼。
def printHighScoreList():
descender = ((key,highScoreList[key]) for key in sorted(highScoreList,key=highScoreList.get, reverse=True))
for key, value in descender:
print(key, value)
在第三個元素上以升序對列表進行排序,然后基於列表的第二個元素以降序對結果列表進行排序。 演示:
>>> 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]]
使用復合鍵進行排序。 由於您希望根據第一個索引對列表列表進行反向排序,因此請按原樣使用第二個索引來反轉第一個索引的鍵:
highScoreList.sort(key=lambda x: (-x[1], x[2]))
highScoreList
現在已正確排序:
[['Dummy2', 100, 80], ['Dummy3', 100, 90], ['Dummy1', 40, 50]]
@BHATIRSHAD的答案中的double sort方法耗時3.39us(在您的機器列表中為10k循環),而上述方法僅需1.5us。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.