collections — Специализированные контейнеры

Модуль collections предоставляет альтернативы встроенным контейнерам Python с расширенной функциональностью.

from collections import Counter, defaultdict, namedtuple, deque

Counter — Подсчёт элементов

from collections import Counter

words = ['яблоко', 'банан', 'яблоко', 'вишня', 'банан', 'яблоко']
count = Counter(words)
print(count)  # Counter({'яблоко': 3, 'банан': 2, 'вишня': 1})

print(count.most_common(2))  # Два самых частых

Counter('mississippi')  # Подсчёт символов

defaultdict — Словарь с значением по умолчанию

from collections import defaultdict

# Группировка
groups = defaultdict(list)
for name, dept in [('Алиса', 'IT'), ('Боб', 'HR'), ('Кэрол', 'IT')]:
    groups[dept].append(name)

# Подсчёт
word_count = defaultdict(int)
for word in 'привет мир привет'.split():
    word_count[word] += 1

namedtuple — Именованные поля

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(3, 4)
print(p.x, p.y)      # 3 4
print(p._asdict())    # {'x': 3, 'y': 4}

deque — Двусторонняя очередь

from collections import deque

d = deque([1, 2, 3])
d.append(4)        # Справа
d.appendleft(0)    # Слева
d.pop()            # Удалить справа
d.popleft()        # Удалить слева

# Фиксированный размер
d = deque(maxlen=3)
d.extend([1, 2, 3, 4, 5])
print(d)  # deque([3, 4, 5])

Частые ошибки

Официальная документация

collections — Container datatypes

Полный справочник API (API Reference)

Классы

Класс Описание
collections.namedtuple Функция-фабрика для кортежей с именованными полями.
collections.deque Двусторонняя очередь с быстрым добавлением и удалением с обоих концов.
collections.ChainMap Объединяет несколько словарей в одно логическое представление.
collections.Counter Словарь для подсчета частотности элементов.
collections.OrderedDict Словарь, сохраняющий порядок добавления (встроен в dict с Python 3.7+).
collections.defaultdict Словарь, автоматически создающий пустые значения для новых ключей.

Методы Counter

Метод Описание
Counter.elements() Возвращает итератор по элементам (повторяет элементы согласно их счетчику).
Counter.most_common([n]) Возвращает список n самых частых элементов.
Counter.subtract(other) Вычитает элементы из другого iterable или словаря.