Ответ
Модуль collections
в Python предоставляет специализированные типы данных-контейнеров, которые являются альтернативами встроенным dict
, list
, set
и tuple
.
Наиболее часто используемые классы:
-
defaultdict
Словарь, который не вызываетKeyError
при обращении к несуществующему ключу. Вместо этого он создает элемент с помощью "фабрики", переданной при инициализации. Идеально подходит для группировки и подсчета элементов.from collections import defaultdict # При обращении к новому ключу будет вызван int(), который вернет 0 word_counts = defaultdict(int) words = ['apple', 'banana', 'apple'] for word in words: word_counts[word] += 1 # word_counts -> defaultdict(<class 'int'>, {'apple': 2, 'banana': 1})
-
Counter
Специализированный словарь для подсчета хешируемых объектов. Упрощает код для подсчета частоты встречаемости элементов в последовательности.from collections import Counter colors = ['red', 'blue', 'red', 'green', 'blue', 'red'] color_counts = Counter(colors) # color_counts -> Counter({'red': 3, 'blue': 2, 'green': 1}) print(color_counts.most_common(1)) # [('red', 3)]
-
namedtuple
Фабричная функция для создания кортежей, к элементам которых можно обращаться по именам полей. Делает код более читаемым без необходимости создавать полноценный класс.from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(10, 20) print(f"{p.x=}, {p.y=}") # p.x=10, p.y=20
-
deque
(двусторонняя очередь) Список, оптимизированный для быстрых операций добавления и удаления элементов с обоих концов (сложность O(1)). Обычныйlist
имеет сложность O(n) для операций в начале. Используется для реализации очередей и стеков.from collections import deque # Очередь с максимальной длиной 3 last_three_items = deque(maxlen=3) last_three_items.append(1) last_three_items.append(2) last_three_items.append(3) last_three_items.append(4) # 1 будет вытеснен # last_three_items -> deque([2, 3, 4], maxlen=3) last_three_items.popleft() # вернет 2
Также полезны:
OrderedDict
: До Python 3.7 был единственным словарем, сохраняющим порядок вставки ключей. Сейчас стандартныйdict
также гарантирует порядок.ChainMap
: Группирует несколько словарей в одно представление для поиска (поиск идет по словарям последовательно).