猿问

是否有任何节奏曲的方法来组合两个切分(增加出现在两个切分中的键的值)?

是否有任何节奏曲的方法来组合两个切分(增加出现在两个切分中的键的值)?

例如,我有两个字典:

Dict A: {'a': 1, 'b': 2, 'c': 3}Dict B: {'b': 3, 'c': 4, 'd': 5}

我需要一种“合二为一”的节奏曲方式,结果是:

{'a': 1, 'b': 5, 'c': 7, 'd': 5}

也就是说:如果一个键出现在两个数据中,那么添加它们的值,如果它只出现在一个DECT中,则保留它的值。


慕村9548890
浏览 400回答 3
3回答

明月笑刀无情

使用collections.Counter:>>> from collections import Counter>>> A = Counter({'a':1, 'b':2, 'c':3})>>> B = Counter({'b':3, 'c':4, 'd':5}) >>> A + BCounter({'c': 7, 'b': 5, 'd': 5, 'a': 1})计数器基本上是dict,所以您仍然可以对它们执行通常使用该类型的所有其他操作,例如对它们的键和值进行迭代。

白衣染霜花

一种更通用的解决方案,也适用于非数字值:a = {'a': 'foo', 'b':'bar', 'c': 'baz'}b = {'a': 'spam', 'c':'ham', 'x': 'blah'}r = dict(a.items() + b.items() +     [(k, a[k] + b[k]) for k in set(b) & set(a)])或者更普通的:def combine_dicts(a, b, op=operator.add):     return dict(a.items() + b.items() +         [(k, op(a[k], b[k])) for k in set(b) & set(a)])例如:>>> a = {'a': 2, 'b':3, 'c':4}>>> b = {'a': 5, 'c':6, 'x':7}>>> import operator>>> print combine_dicts(a, b, operator.mul) {'a': 10, 'x': 7, 'c': 24, 'b': 3}

慕少森

>>> A = {'a':1, 'b':2, 'c':3}>>> B = {'b':3, 'c':4, 'd':5}>>> c = {x: A.get(x, 0) + B.get(x, 0) for x in set(A).union(B)} >>> print(c){'a': 1, 'c': 7, 'b': 5, 'd': 5}
随时随地看视频慕课网APP

相关分类

Python
我要回答