如果我有
a = [[['Q1', 20], ['R1', 14]], [['Q2', 18], ['R2', 17]], [['Q3', 24], ['R1', 14]]]
如何对a
进行排序,以便获得:
[[['Q3', 24], ['R1', 14]], [['Q2', 18], ['R2', 17]], [['Q1', 20], ['R1', 14]]]
因为这些元组中列表的第二个元素的总和分别为38、35和34(在第二个排序版本中)?而且,必须有一种更好的方法来组织所有这些工作,因此对此的建议将很乐意被接受!
答案 0 :(得分:1)
IIUC,请使用T
中的key
arg + reverse=True
。
sorted
答案 1 :(得分:1)
您可以将>>> 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]