如何将 int 的值与元组列表中的同一组组合?

Ale*_*hor 3 python algorithm tuples list python-3.x

我有一个如下所示的数据列表结构:

[('a', 1),('a', 2),('b', 0),('b', 1),('c', 0)]
Run Code Online (Sandbox Code Playgroud)

如果第一项相同,我正在尝试组合元组的第二个值。(并删除重复项)

最终结果应该是:

[('a', 3),('b', 1),('c', 0)]
Run Code Online (Sandbox Code Playgroud)

我的方法是创建第二个空列表并检查列表中是否存在第一个元素,如果不存在则追加。否则循环遍历第二个列表,并将迭代中 [1] 项的值从第一个列表添加到第二个列表中的 [1] 项。我无法让我的概念发挥作用。如果有人有更有效的解决方案,我也愿意接受建议。

secondList = []
for item in firstList:
    if (secondList.count(item[0]]):
      secondList.append(item)
    else:
      for item_j in secondList:
        if (item_j[0] == item[0]):
          item_j[1] = item_j[1]+item[1]
Run Code Online (Sandbox Code Playgroud)

Aso*_*cia 5

您可以使用itertools.groupby. 首先按第 0 个索引对它们进行分组sum,然后对每组第 1 个索引处的值进行分组:

from itertools import groupby
from operator import itemgetter
data = [("a", 1),("a", 2),("b", 0),("b", 1),("c", 0)]

result = [(k, sum(item[1] for item in g)) for k, g in groupby(data, key=itemgetter(0))]
print(result)
Run Code Online (Sandbox Code Playgroud)

输出:

[('a', 3), ('b', 1), ('c', 0)]
Run Code Online (Sandbox Code Playgroud)

PS:请注意,如果您的列表尚未按照文档中的说明按第 0 个索引排序,则这将无法按您的预期工作:

通常,迭代需要已经在同一个键函数上排序。