繁体   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