根据内部列表的第N个元素的总和对列表列表进行排序

时间:2018-07-31 23:16:45

标签: python list sorting tuples

如果我有

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(在第二个排序版本中)?而且,必须有一种更好的方法来组织所有这些工作,因此对此的建议将很乐意被接受!

2 个答案:

答案 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]