从多个计数器中获取最大值而不是将它们添加起来 - Python

时间:2016-01-01 20:15:06

标签: python dictionary max counter

如何“合并”多个Counter,但只为“合并”计数器的每个键获取最大值?

考虑到几个计数器:

>>> from collections import Counter
>>> x = Counter([('a'), ('a', 'bc'), ('a', 'bc'), ('xyz', 'hooli')])
>>> y = Counter([('a'), ('a'), ('a'), ('asd', 'asd')])

我可以这样做来添加它们:

>>> x + y
Counter({'a': 4, ('a', 'bc'): 2, ('asd', 'asd'): 1, ('xyz', 'hooli'): 1})

但是如果我的目标是将计数器组合在一起,但如果它们具有相同的键,则目标是不添加值,而是取最大值它。 我该怎么做?

我尝试过以下代码:

>>> z = Counter()
>>> for c in [x,y]:
...     for k in c:
...             z[k] = max(z.get(k,0), c[k])
... 
>>> z
Counter({'a': 3, ('a', 'bc'): 2, ('asd', 'asd'): 1, ('xyz', 'hooli'): 1})

但还有其他方法可以实现相同的输出吗?

1 个答案:

答案 0 :(得分:3)

Counter联合运算符(|)返回最大计数:

>>> x | y
Counter({'a': 3, ('a', 'bc'): 2, ('xyz', 'hooli'): 1, ('asd', 'asd'): 1})