我有一个包含2个列表的列表,每个列表包含700个词典。
每个字典都有一个字数,我想组合它们,这样就可以添加相同键的值。
我尝试过:
combine_dicts = collections.defaultdict(int)
for k, v in itertools.chain(x.iteritems() for x in tuple(dicts[0])):
combine_dicts[k] += v
dicts[0]
和dicts[1]
是2个词典列表。
但它会引发以下错误:
ValueError:要解压的值太多。
有没有更好的方法呢?
答案 0 :(得分:1)
你误用了chain
;你希望chain.from_iterable
链接生成器表达式的可迭代输出,而不只是将生成器函数包装为无操作:
for k, v in itertools.chain.from_iterable(x.iteritems() for x in dicts[0]):
虽然只获得list
的第一个dict
;为了得到这两者,我们需要MOAR CHAINING!:
# Qualifying chain over and over is a pain
from itertools import chain
for k, v in chain.from_iterable(x.iteritems() for x in chain(*dicts)):
答案 1 :(得分:0)
combine_dicts = defaultdict(int)
for i in range(0,2):
for d in dicts[i]:
for k,v in d.iteritems():
combine_dicts[k] += v
这会迭代每个字典一次,因此内存使用应该是有效的。