collections — tipos de coleção e contentores

Este módulo fornece tipos de dados de contentores especializados que complementam os tipos nativos list, tuple, dict e set: uma fila de duas extremidades (deque), uma fábrica de tuplos com campos nomeados (namedtuple()), e um dicionário com preservação de ordem (OrderedDict).

Classes

class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)

As deques (filas de duas extremidades) são contentores semelhantes a listas que suportam acréscimos e remoções em O(1) em qualquer extremidade. As novas deques são criadas com os seguintes argumentos:

  • iterable é um iterável usado para preencher a deque no momento da criação. Pode ser um tuplo ou lista vazia para criar uma deque inicialmente vazia.

  • maxlen deve ser especificado e a deque ficará limitada a este comprimento máximo. Quando a deque estiver cheia, qualquer novo elemento adicionado descartará elementos da extremidade oposta.

  • O argumento opcional flags pode ser 1 para verificar estouro ao adicionar elementos.

Os objetos deque suportam bool, len(), iteração e carga e armazenamento por índice. Dispõem também dos seguintes métodos:

append(x: Any) None

Adiciona x ao lado direito da deque. Levanta IndexError se a verificação de estouro estiver ativada e não houver mais espaço na fila.

appendleft(x: Any) None

Adiciona x ao lado esquerdo da deque. Levanta IndexError se a verificação de estouro estiver ativada e não houver mais espaço na fila.

pop() Any

Remove e retorna um elemento do lado direito da deque. Levanta IndexError se não houver elementos presentes.

popleft() Any

Remove e retorna um elemento do lado esquerdo da deque. Levanta IndexError se não houver elementos presentes.

extend(iterable: Iterable) None

Expande a deque acrescentando todos os elementos de iterable à direita da deque. Levanta IndexError se a verificação de estouro estiver ativada e não houver mais espaço na deque.

collections.namedtuple(name: str, fields: str | Sequence[str]) type

Esta é uma função de fábrica para criar um novo tipo namedtuple com um nome específico e um conjunto de campos. Um namedtuple é uma subclasse de tuplo que permite aceder aos seus campos não só por índice numérico, mas também através de sintaxe de acesso a atributos usando nomes simbólicos. Fields é uma sequência de strings que especificam os nomes dos campos. Por compatibilidade com CPython, também pode ser uma string com nomes de campos separados por espaço (mas isso é menos eficiente). Exemplo de utilização:

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]

As instâncias fornecem também o seguinte método:

collections._asdict() OrderedDict

Retorna os nomes dos campos e os seus valores como um OrderedDict.

class collections.OrderedDict(*args: Any, **kwargs: Any)

Subclasse do tipo dict que regista e preserva a ordem das chaves adicionadas. Aceita as mesmas formas de construção que dict (um iterável de pares (key, value), outro mapeamento, ou argumentos de palavra-chave). Quando o dicionário ordenado é iterado, as chaves/itens são retornados pela ordem em que foram adicionados:

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)

Saída:

z 1
a 2
w 5
b 3
popitem() Tuple

Remove e retorna um par (chave, valor) do dicionário. Os pares são retornados por ordem LIFO.

Diferença em relação ao CPython

OrderedDict.popitem() não suporta o argumento last=False e removerá e retornará sempre o último elemento, se presente.

Uma alternativa para isso é usar pop(<first_key>) para remover o primeiro elemento:

first_key = next(iter(d))
d.pop(first_key)