collections — типы коллекций и контейнеров¶
Этот модуль предоставляет специализированные контейнерные типы данных, дополняющие встроенные list, tuple, dict и set: двустороннюю очередь (deque), фабрику кортежей с именованными полями (namedtuple()) и словарь, сохраняющий порядок (OrderedDict).
Классы¶
- class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)¶
Деки (двусторонние очереди) — это контейнер, подобный списку, который поддерживает добавление и извлечение элементов с любой стороны за время O(1). Новые деки создаются с помощью следующих аргументов:
iterable — это итерируемый объект, используемый для заполнения дека при его создании. Это может быть пустой кортеж или список для создания изначально пустого дека.
maxlen должен быть указан, и дек будет ограничен этой максимальной длиной. Когда дек заполнен, любые новые добавляемые элементы будут вытеснять элементы с противоположного конца.
Необязательный параметр flags может быть равен 1 для проверки переполнения при добавлении элементов.
Объекты дека поддерживают
bool,len(), итерацию, а также чтение и запись по индексу. Они также имеют следующие методы:- append(x: Any) None¶
Добавляет x в правую часть дека. Возбуждает
IndexError, если проверка переполнения включена и в очереди больше нет места.
- appendleft(x: Any) None¶
Добавляет x в левую часть дека. Возбуждает
IndexError, если проверка переполнения включена и в очереди больше нет места.
- pop() Any¶
Удаляет и возвращает элемент из правой части дека. Возбуждает
IndexError, если элементов нет.
- popleft() Any¶
Удаляет и возвращает элемент из левой части дека. Возбуждает
IndexError, если элементов нет.
- extend(iterable: Iterable) None¶
Расширяет дек, добавляя все элементы из iterable справа от дека. Возбуждает
IndexError, если проверка переполнения включена и в деке больше нет места.
- collections.namedtuple(name: str, fields: str | Sequence[str]) type¶
Это фабричная функция для создания нового типа namedtuple с определённым именем и набором полей. namedtuple — это подкласс tuple, который позволяет обращаться к своим полям не только по числовому индексу, но и с помощью синтаксиса доступа к атрибутам, используя символьные имена полей. Fields — это последовательность строк, задающих имена полей. Для совместимости с CPython это также может быть строка с именами полей, разделёнными пробелами (но это менее эффективно). Пример использования:
from collections import namedtuple MyTuple = namedtuple("MyTuple", ("id", "name")) t1 = MyTuple(1, "foo") t2 = MyTuple(2, "bar") print(t1.name) assert t2.name == t2[1]
Экземпляры также предоставляют следующий метод:
- collections._asdict() OrderedDict
Возвращает имена полей и их значения в виде
OrderedDict.
- class collections.OrderedDict(*args: Any, **kwargs: Any)¶
Подкласс типа
dict, который запоминает и сохраняет порядок добавления ключей. Принимает те же формы конструктора, что иdict(итерируемый объект из пар(key, value), другое отображение или именованные аргументы). При итерации по упорядоченному словарю ключи/элементы возвращаются в порядке их добавления:from collections import OrderedDict # To make benefit of ordered keys, OrderedDict should be initialized # from sequence of (key, value) pairs. d = OrderedDict([("z", 1), ("a", 2)]) # More items can be added as usual d["w"] = 5 d["b"] = 3 for k, v in d.items(): print(k, v)
Вывод:
z 1 a 2 w 5 b 3
- popitem() Tuple¶
Удаляет и возвращает пару (key, value) из словаря. Пары возвращаются в порядке LIFO.
Отличие от CPython
OrderedDict.popitem()не поддерживает аргументlast=Falseи всегда удаляет и возвращает последний элемент, если он есть.Обходным решением является использование
pop(<first_key>)для удаления первого элемента:first_key = next(iter(d)) d.pop(first_key)