Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从多个计数器中获取最大值,而不是将它们相加-Python_Python_Dictionary_Max_Counter - Fatal编程技术网

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

从多个计数器中获取最大值,而不是将它们相加-Python,python,dictionary,max,counter,Python,Dictionary,Max,Counter,如何“组合”多个计数器,但只为“组合”计数器的每个键取最大值? 给定两个计数器: >>> from collections import Counter >>> x = Counter([('a'), ('a', 'bc'), ('a', 'bc'), ('xyz', 'hooli')]) >>> y = Counter([('a'), ('a'), ('a'), ('asd', 'asd')]) 我可以这样做,将它们相加: >>

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

给定两个计数器:

>>> 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})

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

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

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

计数器直观上不应该具有此功能,而且看起来也不应该。对其他数据结构开放吗?当然,任何可以转换回计数器的数据结构都是可行的。只要数据结构的开销与计数器的开销相同或更小。从文档交集和并集返回对应计数器的最小值和最大值这很尴尬,我刚好在上面,错过了一行:>>>c | d#并集:max(c[x],d[x])Counter({a':3,'b':2})