簡體   English   中英

按值排序Python中多個項目的列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM