В этой статье объясняется, как использовать модуль «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:
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» для получения самых верхних пар с наибольшим счетчиком, указав желаемое число в качестве аргумента.