Этот блог предназначен для тех, кто хочет исследовать в Python не только типы данных dict, list, set и tuple.

Начнем с Counter Class.

Встречный класс

Counter — это подкласс dict для подсчета объектов, которые можно хешировать.
Объект можно хэшировать, если он имеет значение хеш-функции. Пример, приведенный ниже, возвращает хешированное значение с использованием хеш-функции. Здесь важно отметить, что возврат хеш-функции имеет значение только для неизменяемых объектов.

//Print hash value of the given tuple
var = ('G','E','E','K')
print(hash(var))

Output:
-6905685582816192954   //Output is called as hash value

Возвращаясь к сути,

Счетчик можно определить как коллекцию, в которой элементы хранятся как ключи словаря, а их счетчики хранятся как значения словаря

from collections import Counter

counter = Counter(['a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd'])
print(counter)

Output:
Counter({'d': 4, 'c': 3, 'b': 2, 'a': 1}) 

В приведенном выше примере мы видим, что счетчики отображаются вместе с ключами с использованием класса счетчика.

Дополнительные методы объектов счетчика

Объекты счетчика поддерживают все методы, поддерживаемые словарем изменяемой структуры данных. Наряду с этим существуют дополнительные методы, поддерживаемые объектами счетчиков, как указано ниже.

total() – Сумма элементов

from collections import Counter

counter = Counter(['a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd'])
print(counter)
print(counter.total())

Output:
Counter({'d': 4, 'c': 3, 'b': 2, 'a': 1})
10 

most_common([n]) — список из n (данное число) общих элементов

from collections import Counter

print(Counter('abbcccdddd').most_common(3))

Output:
[('d', 4), ('c', 3), ('b', 2)]  //b, c and d are most common elements since frequency is more than a

elements() — для перебора элементов

from collections import Counter

c = Counter(a=1, b=2, c=3, d=4)

for i in c.elements():
    print(i, end = ' ')

Output:
a b b c c c d d d d  //If count of element is < 1 or negative then it will be ignored

subtract() — вычитание элементов

from collections import Counter

first = Counter(a=1, b=2, c=3, d=4)
second = Counter(a=0, b=1, c=2, d=3)
first.subtract(second)

print(first)

Output:
Counter({'a': 1, 'b': 1, 'c': 1, 'd': 1})

Математические операции

from collections import Counter

first = Counter(a=1, b=2, c=3, d=4)
second = Counter(a=0, b=1, c=2, d=3)

print(first + second)  #Addition
print(first - second)  #Subtraction
print(first == second) #Equal
print(first <= second) #Inclusion
print(first & second)  #Intersection 
print(first | second)  #Union 

Унарные операции

from collections import Counter

first = Counter(a=1, b=-2, c=3, d=-4)

print(+first)
print(-first)

Output:
Counter({'c': 3, 'a': 1})
Counter({'d': 4, 'b': 2})

Помимо класса Counter, в модуле коллекций есть много других типов данных, таких как ChainMap, OrderedDict, ChainMap и т. д.
Все эти типы данных полезны для сложных требований программирования, и рекомендуется использовать их, когда это возможно.

Спасибо.