collections — tipos de coleção e contêiner

Este módulo fornece tipos de dados de contêiner especializados que complementam os tipos integrados list, tuple, dict e set: uma fila de duas pontas (deque), uma fábrica de tuplas com campos nomeados (namedtuple()) e um dicionário que preserva a ordem (OrderedDict).

Classes

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

Deques (filas de duas pontas) são um contêiner semelhante a uma lista que oferece suporte a inserções e remoções O(1) em qualquer uma das extremidades do deque. Novos deques são criados usando os seguintes argumentos:

  • iterable é um iterável usado para preencher o deque quando ele é criado. Pode ser uma tupla ou lista vazia para criar um deque inicialmente vazio.

  • maxlen deve ser especificado e o deque será limitado a esse comprimento máximo. Quando o deque está cheio, quaisquer novos itens adicionados descartarão itens da extremidade oposta.

  • O parâmetro opcional flags pode ser 1 para verificar estouro ao adicionar itens.

Objetos deque oferecem suporte a bool, len(), iteração e carga e armazenamento por subscrito. Eles também possuem os seguintes métodos:

append(x: Any) None

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

appendleft(x: Any) None

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

pop() Any

Remove e retorna um item do lado direito do deque. Levanta IndexError se não houver itens presentes.

popleft() Any

Remove e retorna um item do lado esquerdo do deque. Levanta IndexError se não houver itens presentes.

extend(iterable: Iterable) None

Estende o deque anexando todos os itens de iterable à direita do deque. Levanta IndexError se a verificação de estouro estiver habilitada e não houver mais espaço no 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. Uma namedtuple é uma subclasse de tuple que permite acessar seus campos não apenas por índice numérico, mas também com uma sintaxe de acesso a atributos usando nomes de campos simbólicos. Fields é uma sequência de strings que especificam os nomes dos campos. Para compatibilidade com o CPython, também pode ser uma string com nomes de campos separados por espaços (mas isso é menos eficiente). Exemplo 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]

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

collections._asdict() OrderedDict

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

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

Subclasse do tipo dict que lembra e preserva a ordem das chaves adicionadas. Aceita as mesmas formas de construtor que dict (um iterável de pares (key, value), outro mapeamento ou argumentos nomeados). Quando um ordered dict é iterado, as chaves/itens são retornados na 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 (key, value) do dicionário. Os pares são retornados em ordem LIFO.

Diferença em relação ao CPython

OrderedDict.popitem() não oferece suporte ao argumento last=False e sempre removerá e retornará o último item, se presente.

Uma solução alternativa para isso é usar pop(<first_key>) para remover o primeiro item:

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