如何根据列表中元组的第二个元素的总和对列表进行排序?

muk*_*pan 3 python tuples python-3.x

我的关注涉及我的一个变量,它在列表中包含元组,如下所示。

test = [(['a','b','c'],[3,2,5]),(['d','e','f'],[1,5,6]),(['g','h','j'],[1,2,4])]
Run Code Online (Sandbox Code Playgroud)

例如,我正在尝试获取列表的第二个元组元素的总和,[3,2,5]并根据该总和对它们进行排序。所以求和的结果应该是。

result1 = [(['a','b','c'],[10]),(['d','e','f'],[12]),(['g','h','j'],[7])]
Run Code Online (Sandbox Code Playgroud)

那么我预期的最终结果应该按降序排序。

result = [['d','e','f'],['a','b','c'],['g','h','j']]
Run Code Online (Sandbox Code Playgroud)

Ees*_*aan 7

优雅的单衬:

result = [a for a, b in sorted(test, key = lambda x : sum(x[1]), reverse=True)]
Run Code Online (Sandbox Code Playgroud)

sorted 在这种情况下,使用传递的可迭代对象返回一个排序列表 test

key定义排序的基础。这是一个 lambda 表达式,它接受元组x并返回元组第二部分的总和sum(x[1])

reverse 设置为按降序排序

最后,我们使用列表推导式去掉数字部分b,只保留字母a