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
IndexErrorse 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
IndexErrorse 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
IndexErrorse não houver elementos presentes.
- popleft() Any¶
Remove e retorna um elemento do lado esquerdo da deque. Levanta
IndexErrorse não houver elementos presentes.
- extend(iterable: Iterable) None¶
Expande a deque acrescentando todos os elementos de iterable à direita da deque. Levanta
IndexErrorse 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
dictque regista e preserva a ordem das chaves adicionadas. Aceita as mesmas formas de construção quedict(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 argumentolast=Falsee 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)