Python中有一个可以累积负值的计数器吗?

时间:2015-05-28 12:10:50

标签: python counter

我正在使用这样的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会让我使用底片?

1 个答案:

答案 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)