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

alv*_*vas 5 python counter dictionary max

还有什么方法可以“组合”多个Counter但只取每个键的最大值作为“组合”计数器?

给定几个这样的计数器:

>>> from collections import Counter
>>> x = Counter([('a'), ('a', 'bc'), ('a', 'bc'), ('xyz', 'hooli')])
>>> y = Counter([('a'), ('a'), ('a'), ('asd', 'asd')])
Run Code Online (Sandbox Code Playgroud)

我可以这样做来将它们相加:

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

但是,如果我的目标是组合计数器,但如果它们具有相同的密钥,那么目标不是值相加,而是取其最大值我该怎么做?

我尝试过以下代码:

>>> 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})
Run Code Online (Sandbox Code Playgroud)

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

mhy*_*itz 4

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

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