首页 > 解决方案 > Python将元组的第二个元素按第一个元素求和

问题描述

我在 Python3 中有以下两个列表:

list1 = [(3, 2), (1, 5), (4, 2), (2, 0)]
list2 = [(1, 6), (2, 1), (3, 3), (4, 0)]

列表中的每个元组都是 (id, score) 的形式。我想分别将每个 id 的两个列表中的分数组合起来,然后按分数降序排序。所以,输出应该是:

list3 = [(1, 11), (3, 5), (4, 2), (2, 1)]

最简单的方法是什么?

标签: pythonlist

解决方案


用于groupby按 id 分组,找到他们的分数总和并按分数降序排序:

from itertools import groupby

list1 = [(3, 2), (1, 5), (4, 2), (2, 0)]
list2 = [(1, 6), (2, 1), (3, 3), (4, 0)]

f = lambda x: x[0]
list3 = sorted([(k, sum(x[1] for x in g)) for k, g in groupby(sorted(list1 + list2, key=f), key=f)], key=lambda x: x[1], reverse=True)

# [(1, 11), (3, 5), (4, 2), (2, 1)]

推荐阅读