Ответ
Модуль 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: Группирует несколько словарей в одно представление для поиска (поиск идет по словарям последовательно).