Как использовать модуль Counter в Python

В этой статье объясняется, как использовать модуль «Counter», который по умолчанию поставляется с языком программирования Python. Все примеры кода в этой статье протестированы на Python версии 3.9.5 в Ubuntu 21.04.

 

О модуле счетчика

Модуль Counter, как следует из названия, может использоваться для подсчета элементов итерируемого или хешируемого объекта в Python. Counter сохраняет каждый элемент итерируемого объекта (например, объект списка Python) как ключ словаря Python. Поскольку словари в Python допускают только уникальные ключи, повторения нет. Соответствующие значения для ключей этих словарей — это количество или количество раз, когда элемент появляется в итерируемом объекте.

 

Основное использование и синтаксис

Чтобы понять базовое использование и синтаксис класса Counter, взгляните на пример кода ниже:

from collections import Counter



list1 = ["a", "a", "b", "b", "b", "c", "d", "d", "d", "d", "e", "e"]

counts = Counter(list1)

print (counts)

Первый оператор импортирует модуль Counter, чтобы в коде можно было использовать класс Counter. Затем определяется новый объект списка Python с некоторыми данными. Затем создается новый экземпляр объекта Counter путем передачи «list1» в качестве аргумента. Последний оператор печатает вывод объекта «counts».

После выполнения приведенного выше примера кода вы должны получить следующий результат:

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

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

 

Объект счетчика ведет себя как объект словаря Python

Словарь в Python — это объект, который хранит элементы в парах «ключ: значение». Ниже приведен пример словаря Python:

dict1 = {"a" : 1, "b" : 2}

Часть перед символом «:» (двоеточие) называется «ключом», а часть после символа двоеточия называется «значением». Вы можете получить доступ к значению любого ключа в словаре Python, используя следующий синтаксис:

dict1 = {"a" : 1, "b" : 2}

print (dict1["a"])

Вам просто нужно указать имя ключа в квадратных скобках «[]». Если ключ не существует в словаре, выдается ошибка KeyError.

Выходные данные приведенного выше примера Counter показывают, что при создании нового экземпляра класса Counter возвращается новый объект типа Counter. Этот объект типа Counter представляет собой не что иное, как словарь Python, за исключением того, что он не генерирует ошибку «KeyError», когда значение ключа отсутствует. Вместо этого он присваивает ему значение «0» (ноль). Вы также можете получить доступ к значениям элементов в объекте Counter, указав имена ключей в квадратных скобках, как и в объекте словаря. Взгляните на пример кода ниже:

from collections import Counter



list1 = ["a", "a", "b", "b", "b", "c", "d", "d", "d", "d", "e", "e"]

counts = Counter(list1)

print (counts["f"])



dict1 = {"a" : 1, "b" : 2}

print (dict1["c"])

После выполнения приведенного выше примера кода вы должны получить следующий результат:

0

Traceback (most recent call last):

File "main.py", line 11, in

print (dict1["c"])

KeyError: 'c'

Как вы можете видеть в выходных данных, когда вы обращаетесь к ключу, которого нет в объекте Counter, возвращается «0» (ноль). С другой стороны, объект словаря Python выдает ошибку «KeyError» при отсутствии ключа.

 

Создание объекта счетчика вручную

Может быть случай, когда вы захотите вручную определить объект Counter вместо анализа итерации, такой как список Python. Чтобы создать объект счетчика, вы можете использовать следующий синтаксис:

from collections import Counter



counter1 = Counter(a=4, b=3)

counter2 = Counter({"a" : 4, "b" : 3})

print (counter1)

print (counter2)

Вы можете использовать синтаксис стиля аргумента, показанный в первом операторе, или использовать синтаксис стиля словаря Python, показанный во втором операторе, для создания новых экземпляров объекта Counter. Оба метода имеют одинаковый эффект и дают одинаковый результат.

После выполнения приведенного выше примера кода вы должны получить следующий результат:

Counter({'a': 4, 'b': 3})

Counter({'a': 4, 'b': 3})

Получение наиболее распространенных элементов из объекта счетчика

Вы можете использовать метод most_common для сортировки элементов и их количества в порядке убывания от объекта типа Counter. Взгляните на пример кода ниже:

from collections import Counter



list1 = ["a", "a", "b", "b", "b", "c", "d", "d", "d", "d", "e", "e"]

counts = Counter(list1)

print (counts.most_common())

Вывод возвращает список кортежей, а не объект словаря Counter или Python.

Вы также можете получить только несколько самых верхних элементов, указав число в методе most_common в качестве аргумента.

from collections import Counter



list1 = ["a", "a", "b", "b", "b", "c", "d", "d", "d", "d", "e", "e"]

counts = Counter(list1)

print (counts.most_common(2))

После выполнения приведенного выше примера кода вы должны получить следующий результат:

[('d', 4), ('b', 3)]

Другие полезные методы счетчика

Вы можете получить доступ ко всем ключам и значениям объекта Counter, используя методы «keys» и «values» соответственно.

from collections import Counter



list1 = ["a", "a", "b", "b", "b", "c", "d", "d", "d", "d", "e", "e"]

counts = Counter(list1)

print (counts.keys())

print (counts.values())

После выполнения приведенного выше примера кода вы должны получить следующий результат:

dict_keys(['a', 'b', 'c', 'd', 'e'])

dict_values([2, 3, 1, 4, 2])

Эти методы создают итерируемые объекты, чтобы вы могли их перебирать.

Вы можете получить как ключи, так и значения, используя метод «items».

from collections import Counter



list1 = ["a", "a", "b", "b", "b", "c", "d", "d", "d", "d", "e", "e"]

counts = Counter(list1)

print (counts.items())

После выполнения приведенного выше примера кода вы должны получить следующий результат:

dict_items([('a', 2), ('b', 3), ('c', 1), ('d', 4), ('e', 2)])

Вы также можете просмотреть результат, полученный методом «item».

Вы можете преобразовать объект Counter в словарь Python с помощью функции «dict».

from collections import Counter



list1 = ["a", "a", "b", "b", "b", "c", "d", "d", "d", "d", "e", "e"]

counts = Counter(list1)

print (dict(counts))

После выполнения приведенного выше примера кода вы должны получить следующий результат:

{'a': 2, 'b': 3, 'c': 1, 'd': 4, 'e': 2}

Цикл по ключам и значениям объекта счетчика

Вы можете легко просмотреть пары ключ-значение объекта Counter, используя метод «items», описанный выше. Взгляните на пример кода ниже:

from collections import Counter



list1 = ["a", "a", "b", "b", "b", "c", "d", "d", "d", "d", "e", "e"]

counts = Counter(list1)

for key, value in counts.items():

print (key, value)


 

В коде к переменной пары ключей можно получить доступ с помощью переменных «ключ» и «значение» соответственно в цикле «for».

После выполнения приведенного выше примера кода вы должны получить следующий результат:

a 2

b 3

c 1

d 4

e 2

Заключение

Встроенный в Python модуль «Счетчик» обеспечивает быстрый и эффективный способ подсчета количества элементов, хранящихся в объекте итеративного типа. Вы можете использовать метод «most_common» для получения самых верхних пар с наибольшим счетчиком, указав желаемое число в качестве аргумента.



2021-06-12T22:53:03
Python