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