collections — tipos de colecciones y contenedores¶
Este módulo proporciona tipos de datos de contenedor especializados que complementan los tipos integrados list, tuple, dict y set: una cola de doble extremo (deque), una fábrica de tuplas con campos nombrados (namedtuple()) y un diccionario que preserva el orden (OrderedDict).
Clases¶
- class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)¶
Las deques (colas de doble extremo) son un contenedor similar a una lista que admite operaciones de añadir y extraer en O(1) desde cualquier extremo de la deque. Las nuevas deques se crean usando los siguientes argumentos:
iterable es un iterable usado para poblar la deque cuando se crea. Puede ser una tupla o lista vacía para crear una deque que inicialmente esté vacía.
maxlen debe especificarse y la deque quedará limitada a esta longitud máxima. Una vez que la deque esté llena, cualquier elemento nuevo añadido descartará elementos del extremo opuesto.
El parámetro opcional flags puede ser 1 para comprobar el desbordamiento al añadir elementos.
Los objetos deque admiten
bool,len(), iteración y carga y almacenamiento por subíndice. También tienen los siguientes métodos:- append(x: Any) None¶
Añade x al lado derecho de la deque. Lanza
IndexErrorsi la comprobación de desbordamiento está habilitada y no hay más espacio en la cola.
- appendleft(x: Any) None¶
Añade x al lado izquierdo de la deque. Lanza
IndexErrorsi la comprobación de desbordamiento está habilitada y no hay más espacio en la cola.
- pop() Any¶
Elimina y devuelve un elemento del lado derecho de la deque. Lanza
IndexErrorsi no hay elementos presentes.
- popleft() Any¶
Elimina y devuelve un elemento del lado izquierdo de la deque. Lanza
IndexErrorsi no hay elementos presentes.
- extend(iterable: Iterable) None¶
Extiende la deque añadiendo todos los elementos de iterable al lado derecho de la deque. Lanza
IndexErrorsi la comprobación de desbordamiento está habilitada y no hay más espacio en la deque.
- collections.namedtuple(name: str, fields: str | Sequence[str]) type¶
Esta es una función de fábrica para crear un nuevo tipo namedtuple con un nombre específico y un conjunto de campos. Una namedtuple es una subclase de tuple que permite acceder a sus campos no solo por índice numérico, sino también con una sintaxis de acceso por atributo usando nombres de campo simbólicos. Fields es una secuencia de cadenas que especifican los nombres de los campos. Por compatibilidad con CPython también puede ser una cadena con nombres de campo separados por espacios (pero esto es menos eficiente). Ejemplo de uso:
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]
Las instancias también proporcionan el siguiente método:
- collections._asdict() OrderedDict
Devuelve los nombres de los campos y sus valores como un
OrderedDict.
- class collections.OrderedDict(*args: Any, **kwargs: Any)¶
Subclase del tipo
dictque recuerda y preserva el orden de las claves añadidas. Acepta las mismas formas de constructor quedict(un iterable de pares(key, value), otro mapeo o argumentos de palabra clave). Cuando se itera sobre un diccionario ordenado, las claves/elementos se devuelven en el orden en que se añadieron: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)
Salida:
z 1 a 2 w 5 b 3
- popitem() Tuple¶
Elimina y devuelve un par (clave, valor) del diccionario. Los pares se devuelven en orden LIFO.
Diferencia con CPython
OrderedDict.popitem()no admite el argumentolast=Falsey siempre eliminará y devolverá el último elemento si está presente.Una solución alternativa para esto es usar
pop(<first_key>)para eliminar el primer elemento:first_key = next(iter(d)) d.pop(first_key)