如果x值相同,如何添加元组y值?

时间:2015-07-20 06:48:13

标签: python list dictionary tuples

start = [(1,2),(3,4),(1,3),(3,5)]

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

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

我在尝试什么:

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

然而,我无法弄清楚如何将我的元组列表转换为单个词典列表。

我尝试了dict(开始)和这个:

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()]

3 个答案:

答案 0 :(得分:2)

我能想到的方法是使用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中的列表

答案 1 :(得分:1)

使用集合模块中的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()] 

答案 2 :(得分:1)

您可以使用dict.setdefault方法创建包含唯一键和相关值列表的字典,然后遍历其项目并计算值>>> 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)]

O(N**2)