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
IndexErrorse 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
IndexErrorse 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
IndexErrorse não houver itens presentes.
- popleft() Any¶
Remove e retorna um item do lado esquerdo do deque. Levanta
IndexErrorse não houver itens presentes.
- extend(iterable: Iterable) None¶
Estende o deque anexando todos os itens de iterable à direita do deque. Levanta
IndexErrorse 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
dictque lembra e preserva a ordem das chaves adicionadas. Aceita as mesmas formas de construtor quedict(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 argumentolast=Falsee 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)