我正在使用这样的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)
这完全不是我的预期。我希望看到:
Counter({'a': 20, 'b': -100})
我的否定点在哪里,是否有一些Counter
会让我使用底片?
答案 0 :(得分:7)
来自the docs:
multiset方法仅适用于具有正值的用例。输入可以是负数或零,但仅创建具有正值的输出。没有类型限制,但值类型需要支持加法,减法和比较。
(强调补充)
但是,如果你仔细一点,你会发现your answer:
元素从迭代计数或从另一个映射(或计数器)添加。 与dict.update()类似但添加计数而不是替换它们。此外,迭代应该是一系列元素,而不是一系列(键,值)对。
(强调补充)
你所要做的就是做一个微小的改变,你的例子就可以了:
from collections import Counter
totals = Counter()
c_one = Counter(a=10, b=1)
c_two = Counter(a=10, b=-101)
# Instead of totals += c_one; totals += c_two
totals.update(c_one)
totals.update(c_two)
# Output: Counter({'a': 20, 'b': -100})
print(totals)