【问题标题】:Merging tuples with same head in list [duplicate]合并列表中具有相同头部的元组[重复]
【发布时间】:2016-11-06 13:06:25
【问题描述】:

我有一个由元组组成的列表。

每个元组都采用以下元组格式:(String, Integer)。

我想合并具有相同头部(字符串)的元组如下:

[("Foo", 2), ("Bar", 4), ("Foo", 2), ("Bar", 4), ("Foo", 2)]

应该变成:

[("Foo", 6), ("Bar",8)].

对此有什么好的python算法?

【问题讨论】:

  • 请先说明您是如何尝试解决问题的。 StackOverflow 不是为您编写代码的网站。你不会从中学到任何东西。
  • 为什么不用字典?

标签: python algorithm


【解决方案1】:

defaultdict 中收集总和怎么样?

from collections import defaultdict

d = defaultdict(int)

for (key, value) in items:
  d[key] += value

然后将它们转回元组列表:

list(d.items())

本示例中的defaultdict 使用int 函数将未知值填充为0。因此,第一次添加特定的 d[key] 时,它假定初始值为 0 并从那里求和。

【讨论】:

    【解决方案2】:
    d = {}
    map(lambda (x,y):d.setdefault(x,[]).append(y),a)
    print [(k,sum(v))  for k,v in d.items()]
    

    【讨论】:

      【解决方案3】:

      你可以试试这个:

      from collections import defaultdict
      
      my_list = [("Foo", 2), ("Bar", 4), ("Foo", 2), ("Bar", 4), ("Foo", 2)]
      
      d = defaultdict(list)
      
      for tup in my_list:
          key, value = tup[0], tup[1]
          d[key].append(value)
      
      lst = [(key, sum(value)) for key, value in d.items()]
      
      result = sorted(lst, key = lambda x: x[1])
      
      print(result)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多