0

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

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

我一直在尝试找到一种添加 2 个字典的方法,以便我可以更新现有键的值(总和),并为不存在的键添加键和值。

结果:

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

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

有什么方法可以实现这一目标?

更新:

已解决:实际上 collections.Counter 成功了...谢谢

4

2 回答 2

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}
于 2013-02-19T17:52:55.587 回答
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), []))])

[{'蓝色':1,'绿色':3,'黄色':5},{'蓝色':3,'紫色':10,'绿色':5,'黄色':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)])
于 2013-02-19T17:56:49.123 回答