例如,我有两个词:
Dict A: {'a': 1, 'b': 2, 'c': 3}
Dict B: {'b': 3, 'c': 4, 'd': 5}
Run Code Online (Sandbox Code Playgroud)
我需要一种pythonic方式"组合"两个dicts,结果是:
{'a': 1, 'b': 5, 'c': 7, 'd': 5}
Run Code Online (Sandbox Code Playgroud)
也就是说:如果两个词中都出现一个键,则添加它们的值,如果它只出现在一个词典中,则保持其值.
见下文,为什么+=在我原来的柜台上吹掉一把钥匙?
>>> c = Counter({'a': 0, 'b': 0, 'c': 0})
>>> c.items()
[('a', 0), ('c', 0), ('b', 0)]
>>> c += Counter('abba')
>>> c.items()
[('a', 2), ('b', 2)]
Run Code Online (Sandbox Code Playgroud)
我认为至少可以说这是不礼貌的,"X被统计0次"和"我们甚至不算Xs"之间存在很大差异.它似乎collections.Counter根本不是一个反击,它更像是一个多重集.
但是计数器是dict的子类,我们允许用零值或负值构造它们:Counter(a=0, b=-1).如果它实际上是"一包东西",这不会被禁止,限制init接受可迭代的可迭代物品吗?
进一步混淆事项,对与操作员有不同行为的反制具update和subtract方法.看来这堂课正在发生身份危机!+-
反击是一个字典还是一个包?
我使用的Counter是这样的:
from collections import Counter
totals = Counter()
c_one = Counter(a=10, b=1)
c_two = Counter(a=10, b=-101)
totals += c_one
totals += c_two
# Output: Counter({'a': 20})
print(totals)
Run Code Online (Sandbox Code Playgroud)
这根本不是我的预期.我希望看到:
Counter({'a': 20, 'b': -100})
Run Code Online (Sandbox Code Playgroud)
我的底片去了哪里,是否会有一些Counter让我使用底片?