【问题标题】:How to add tuples y values if x values are the same?如果 x 值相同,如何添加元组 y 值?
【发布时间】:2015-10-09 05:00:00
【问题描述】:
start = [(1,2),(3,4),(1,3),(3,5)]

如果 x 值有效地相同,我如何添加元组 y 值(我正在使用 700,000 个元组)?

end = [(1,5),(3,9)]

我正在尝试什么:

我正在尝试将我的元组列表转换为单个字典的列表。但是,这对我来说似乎不是最有效的方法。

但是我不知道如何将我的元组列表转换为单个字典的列表。

我试过 dict(start) 和这个:

a = []
for lv in length_view:
    a.append(dict(lv))

我该怎么办?

然后我打算尝试使用:

from collections import Counter
c = Counter()
for some_dictionary in some_list:
    c.update(some_dictionary)

[{key: value} for key, value in c.items()]

【问题讨论】:

    标签: python list dictionary tuples


    【解决方案1】:

    我能想到的一种方法,使用collections.defaultdict是-

    >>> from collections import defaultdict
    >>> dic = defaultdict(int)
    >>> for a, b in start:
    ...     dic[a] += b
    ...
    >>> list(dic.items())
    [(1, 5), (3, 9)]
    

    如果您使用的是 Python 2.x ,则不需要 list(..) 围绕 dic.items() ,因为 .items() 在 python 2.x 中返回一个列表

    【讨论】:

      【解决方案2】:

      使用集合模块中的defaultdict 函数。

      from collections import defaultdict
      start = [(1,2),(3,4),(1,3),(3,5)]
      d = defaultdict(list)
      for x,y in start:
          d[x].append(y)
      
      print [(i,sum(j)) for i,j in d.items()] 
      

      【讨论】:

      • 当你最终对值求和时,为什么要使用列表作为 defaultdict 容器?
      • 戳一下,后来我意识到了。
      【解决方案3】:

      您可以使用dict.setdefault 方法创建一个具有唯一键和相关值列表的字典,然后遍历其项目并计算sum 的值:

      >>> start = [(1,2),(3,4),(1,3),(3,5)]
      >>> d={}
      >>> for i,j in start:
      ...   d.setdefault(i,[]).append(j)
      ... 
      
      >>> [(i,sum(j)) for i,j in d.items()]
      [(1, 5), (3, 9)]
      

      或者作为更有效的方式使用collections.defaultdict

      >>> from collections import defaultdict
      >>> d = defaultdict(int)
      >>> for i,j in start:
      ...     d[i]+=j
      ... 
      >>> d.items()
      [(1, 5), (3, 9)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-20
        • 1970-01-01
        相关资源
        最近更新 更多