簡體   English   中英

根據內部列表的第N個元素的總和對列表列表進行排序

[英]Sort list of lists of lists based on sum of Nth element of inner lists

如果我有:

a = [[['Q1', 20], ['R1', 14]], [['Q2', 18], ['R2', 17]], [['Q3', 24], ['R1', 14]]]

我如何對a進行排序a以便得到:

[[['Q3', 24], ['R1', 14]], [['Q2', 18], ['R2', 17]], [['Q1', 20], ['R1', 14]]]

因為這些元組中列表的第二個元素的總和分別為38、35和34(在第二個排序版本中)? 而且,必須有一種更好的方法來組織所有這些工作,因此對此的建議將很樂意被接受!

IIUC,使用key ARG + reverse=Truesorted

>>> sorted(a, key=lambda x: sum(i[1] for i in x), reverse=True)

[[['Q3', 24], ['R1', 14]], [['Q2', 18], ['R2', 17]], [['Q1', 20], ['R1', 14]]]

您可以使用sortedsum

a = [[['Q1', 20], ['R1', 14]], [['Q2', 18], ['R2', 17]], [['Q3', 24], ['R1', 14]]]
new_a = sorted(a, key=lambda x:sum(c for _, c in x), reverse=True)

輸出:

[[['Q3', 24], ['R1', 14]], [['Q2', 18], ['R2', 17]], [['Q1', 20], ['R1', 14]]]

編輯:要刪除總和大於指定變量的值的列表,可以使用列表理解:

final_result = [i for i in new_a if sum(c for _, c in i) < 36]

輸出:

[[['Q2', 18], ['R2', 17]], [['Q1', 20], ['R1', 14]]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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