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