Счётчик — тип-отображение для упрощения подсчёта количества объектов.
collections.Counter([iterable-or-mapping])

Данный тип, являясь потомком словаря, предоставляет инструменты для подсчёта количества хешируемых объектов.

На заметку
Тип может напомнить вам bag в Smalltalk или multiset в C++.

В этой коллекции сущности хранятся в виде ключей, а их количество — в виде значений.
Количество может обозначаться любым целым, включая нуль и отрицательные.

Подсчёт может производиться для элементов объекта, поддерживающего итерирование, либо другого отображения.

    from collections import Counter


mycounter = Counter()
mycounter.items()
# dict_items([])

mycounter = Counter({'one': 1, 'many': 10})
mycounter.items()
# dict_items([('one', 1), ('many', 10)])

mycounter = Counter('abca')
mycounter.items()
# dict_items([('a', 2), ('b', 1), ('c', 1)])

mycounter = Counter(['a', 'b', 'c', 'a'])
mycounter.items()
# dict_items([('a', 2), ('b', 1), ('c', 1)])

# дополнение счётчика
mycounter['a'] += 1
mycounter.items()
# dict_items([('a', 3), ('b', 1), ('c', 1)])

# все повторения элементов с ненулевым положительным количеством
list(mycounter.elements())
# ['a', 'a', 'a', 'b', 'c']

# самые встречаемые 2 элемента
mycounter.most_common(2)
# [('a', 3), ('b', 1)]

# вычитание из счётчика
mycounter.subtract({'a': 1})
mycounter.items()
# dict_items([('a', 2), ('b', 1), ('c', 1)])

# удаление элемента
del mycounter['b']
mycounter.items()
# dict_items([('a', 2), ('c', 1)])

Для счётчиков также доступны операции:

+сложение
-вычитание (с сохранением только положительных значений)
&пересечение (min(counter1[x], counter2[x]))
|объединение (max(counter1[x], counter2[x]))

На заметку
Счётчики были спроектированы в основном для работы с положительными целыми. Однако это не означает, что нельзя в качестве значения поместить объект иного типа.

_
Синонимы поиска: collections.Counter, collections, Counter, bag, multiset, счетчик
В разделе «collections»: collections.OrderedDict
На заметку
Зарегистрированные пользователи могут добавлять Видео.