![](/img/trans.png)
[英]How to sort a list of lists based on the length of the inner lists, but if two inner lists are equal then sort based on first element of inner list
[英]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=True
從sorted
。
>>> 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]]]
您可以使用sorted
與sum
:
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.