更新或添加键到dicts

时间:2013-02-19 17:48:40

标签: python dictionary bigdata

我有很多词,我给这个例子2:

dict1={'green': 3, 'yellow': 5, 'blue': 1}
dict2={'green': 5, 'yellow': 1, 'blue': 3, 'purple': 10}

我一直试图找到一种方法来添加2个dicts,这样我就可以更新现有键的值(sum),并为不存在的键添加键和值。

结果:

results = {'green': 8, 'yellow': 6, 'blue': 4, 'purple': 10}

我试过了dict1.update(dict2),但是如你所知,我只有一本包含更新值的字典,而不是总结。

有任何方法可以实现这一目标吗?

更新

解决:实际上是collections.Counter做了诀窍......谢谢

2 个答案:

答案 0 :(得分:0)

{x: dict1.get(x,0) + dict2.get(x,0) for x in set(dict1.keys() + dict2.keys())}

输出:

{'blue': 4, 'purple': 10, 'green': 8, 'yellow': 6}

答案 1 :(得分:0)

嗯,这太难了......

dicts = [dict1, dict2]
dict([(key, sum(map(lambda x: x.get(key) or 0, dicts))) for key in set(reduce(lambda a,b: a + b, map(lambda x: x.keys(), dicts), []))])

[{'blue':1,'green':3,'yellow':5},{'blue':3,'purple':10,'green':5,'yellow':1}]

或更具可读性

dicts = [dict1, dict2]
keys = reduce(lambda a,b: a + b, map(lambda x: x.keys(), dicts), [])
dict([(key, sum(map(lambda x: x.get(key) or 0, dicts))) for key in set(keys)])