Как еще «объединить» несколько Counter
, но только принимая максимальное значение для каждой клавиши для «комбинированного» счетчика?Принимая максимум от нескольких счетчиков вместо их добавления - Python
Учитывая несколько счетчиков, как, например:
>>> 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})
Но есть другой способ достичь того же выход?
Счетчики интуитивно не должны иметь эту функциональность, а не по всей видимости. Открыта для других структур данных? – Untitled123
Несомненно, любая структура данных, которая может быть возвращена в счетчик, должна быть осуществимой. Пока структура данных имеет одинаковые или меньшие накладные расходы, чем счетчик. – alvas
Из документов * Пересечение и объединение возвращают минимум и максимум соответствующих значений * –