我有两个python词典,我试图将值加在一起.答案是:是否有任何pythonic方法来组合两个dicts(为两个键中出现的键添加值)?让我一路走来.但是,我的情况是净值可能为零或负值,但我仍然想要最终字典中的值.即使计数器接受负值,它也只会输出一个大于零的值.
例
from collections import Counter
A = Counter({'a': 1, 'b': 2, 'c': -3, 'e': 5, 'f': 5})
B = Counter({'b': 3, 'c': 4, 'd': 5, 'e': -5, 'f': -6})
C = A + B
print(C.items())
Run Code Online (Sandbox Code Playgroud)
输出: [('a', 1), ('c', 1), ('b', 5), ('d', 5)]
c = -3 + 4 = 1 是正确的,因此负输入不是问题,但输出中缺少e:0和f:-1
如何执行求和并获得所有值输出?
Mar*_*ers 10
总结将值降为0和更低,是的,如记录所示:
提供了几个数学运算来组合Counter对象以生成多个集合(计数大于零的计数器).加法和减法通过添加或减去相应元素的计数来组合计数器.交点和并集返回相应计数的最小值和最大值.每个操作都可以接受带有符号计数的输入,但输出将排除计数为零或更少的结果.
[...]
- multiset方法仅适用于具有正值的用例.输入可以是负数或零,但仅创建具有正值的输出.没有类型限制,但值类型需要支持加法,减法和比较.
Counter.update()如果要将值保留为0或更低,则需要使用.由于这是就地操作,您必须在此处创建副本:
>>> from collections import Counter
>>> A = Counter({'a': 1, 'b': 2, 'c': -3, 'e': 5, 'f': 5})
>>> B = Counter({'b': 3, 'c': 4, 'd': 5, 'e': -5, 'f': -6})
>>> C = A.copy()
>>> C.update(B)
>>> C
Counter({'b': 5, 'd': 5, 'a': 1, 'c': 1, 'e': 0, 'f': -1})
Run Code Online (Sandbox Code Playgroud)
如果保留A不是目标,您可以直接更新它.
怎么样的:
dict((x, a.get(x, 0) + b.get(x, 0)) for x in set(a)|set(b))
Run Code Online (Sandbox Code Playgroud)
例:
>>> a = {'a':1, 'b':2, 'c':-3, 'e':5, 'f': 5}
>>> b = {'b':3, 'c':4, 'd':5, 'e':-5, 'f': -6}
>>>
>>> dict((x, a.get(x, 0) + b.get(x, 0)) for x in set(a)|set(b))
{'e': 0, 'a': 1, 'f': -1, 'd': 5, 'c': 1, 'b': 5}
Run Code Online (Sandbox Code Playgroud)