← Назад к вопросам

Какие знаешь структуры данных из модуля collections в Python?

1.3 Junior🔥 91 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Структуры данных модуля collections в Python

Модуль collections предоставляет специализированные контейнеры данных, которые расширяют функциональность встроенных типов Python. Это критически важно для написания эффективного и понятного кода.

namedtuple

Иммутабельный кортеж с именованными полями. Идеален для представления простых структур данных без чрезмерной сложности.

from collections import namedtuple

Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(p.x)  # 10
print(p[0])  # 10 — можно обращаться как к кортежу

deque

Двусторонняя очередь с O(1) операциями добавления и удаления элементов с обоих концов. Намного эффективнее списка для операций в начале.

from collections import deque

dq = deque([1, 2, 3])
dq.appendleft(0)  # [0, 1, 2, 3]
dq.pop()  # 3
dq.popleft()  # 0

Counter

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

from collections import Counter

data = ["a", "b", "a", "c", "b", "a"]
c = Counter(data)
print(c)  # Counter({"a": 3, "b": 2, "c": 1})
print(c.most_common(2))  # [("a", 3), ("b", 2)]

defaultdict

Словарь с дефолтным значением для несуществующих ключей. Избегаешь проверок if key in dict и KeyError.

from collections import defaultdict

g = defaultdict(list)
g["key1"].append("value1")
print(g["key1"])  # ["value1"]
print(g["key2"])  # [] — автоматически создаётся пустой список

OrderedDict

Словарь, который запоминает порядок вставки элементов. В Python 3.7+ обычный dict уже сохраняет порядок, но OrderedDict имеет дополнительные методы как move_to_end().

from collections import OrderedDict

od = OrderedDict()
od["first"] = 1
od["second"] = 2
od.move_to_end("first")  # Перемещает "first" в конец

ChainMap

Объединяет несколько словарей в один логический. Полезен для работы с конфигурациями и приоритизацией источников данных.

from collections import ChainMap

dict1 = {"a": 1, "b": 2}
dict2 = {"c": 3, "a": 100}
chained = ChainMap(dict1, dict2)
print(chained["a"])  # 1 — берёт из первого словаря

Практические применения

  • deque — реализация очередей и стеков
  • Counter — анализ текстов, подсчёт частотности
  • defaultdict — группировка данных по ключам
  • namedtuple — замена простых классов данных
  • ChainMap — управление конфигурациями с fallback

Эти структуры повышают читаемость кода и оптимизируют производительность под конкретные задачи.