O Pacote Collections do Python

Cansado de programar?

Conheça a melhor e mais completa formação de Python e Django e sinta-se um programador verdadeiramente competente. Além de Python e Django, você também vai aprender Banco de Dados, SQL, HTML, CSS, Javascript, Bootstrap e muito mais!

Quero aprender Python e Django de Verdade! Quero aprender!
Suporte

Tire suas dúvidas diretamente com o professor

Projetos práticos

Projetos práticos voltados para o mercado de trabalho

Prática profissional

Formação moderna com foco na prática profissional

Download do Artigo

✅ Artigo atualizado em Setembro 2026 Corrigimos o exemplo de fila com deque (FIFO de verdade, com append + popleft), a comparação com o dict (que preserva a ordem de inserção desde o Python 3.7) e conferimos as saídas no Python 3.13.

Salve salve Pythonista!

As estruturas de dados são elementos fundamentais na programação e desempenham um papel crucial na eficiência e organização do código.

A biblioteca padrão do Python possui um módulo chamado collections, que traz um conjunto de estruturas de dados especializadas que complementam os tipos embutidos (list, dict, tuple e set).

Como ele faz parte da biblioteca padrão, não é preciso instalar nada: basta um from collections import ....

Neste artigo, abordaremos as estruturas de dados mais utilizadas do pacote collections do Python e como elas podem auxiliar no desenvolvimento de aplicações mais eficientes e flexíveis.

Vá Direto ao Assunto…

Antes de explorarmos as estruturas de dados disponíveis no pacote collections, é importante destacar que esse módulo oferece alternativas especializadas para as estruturas embutidas do Python, como listas e dicionários.

Cada uma resolve melhor um caso específico: contar elementos, criar valores padrão, inserir e remover nas duas pontas de uma sequência, e assim por diante.

A Collection defaultdict

Uma das estruturas de dados mais utilizadas do pacote collections é o defaultdict.

Diferente do dicionário tradicional, o defaultdict aceita uma função que será chamada quando um valor não existir.

Por exemplo, se tentarmos acessar um elemento que não está presente no dicionário, em vez de lançar um KeyError, o defaultdict irá criar o elemento utilizando a função especificada.

1
2
3
4
from collections import defaultdict

dicionario = defaultdict(int)
dicionario['chave'] += 1

Nesse exemplo, o dicionário dicionario utiliza a função int como padrão para os valores que não foram inicializados previamente.

Caso a chave não exista, o valor será inicializado como 0.

Dessa forma, podemos incrementar o valor de dicionario['chave'] mesmo sem ter atribuído um valor inicial a ele.

Está curtindo esse conteúdo? :thumbsup:

Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?

Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

Assine as PyDicas e receba 30 dias do melhor conteúdo Python na sua Caixa de Entrada: direto e sem enrolação!

A Collection Counter

Outra estrutura de dados interessante é o Counter, que permite contar elementos em uma lista ou qualquer objeto iterável.

Esse contador é implementado como um dicionário de contadores, onde cada elemento é mapeado para uma contagem.

1
2
3
4
5
from collections import Counter

lista = ['a', 'b', 'c', 'a', 'b', 'a']
contador = Counter(lista)
print(contador)

A saída será:

1
Counter({'a': 3, 'b': 2, 'c': 1})

O Counter também oferece métodos úteis, como a possibilidade de encontrar os elementos mais comuns, remover ou adicionar elementos.

A Collection deque

Um tipo de estrutura de dados frequente na programação é a fila (que também pode ser gerenciada com a biblioteca queue), que segue o princípio FIFO (First In, First Out).

O pacote collections oferece a classe deque (double-ended queue, ou “fila de duas pontas”), que permite inserir e remover elementos nas duas extremidades de forma eficiente.

Para montar uma fila FIFO, inserimos no final com append e removemos do início com popleft:

1
2
3
4
5
6
7
8
9
10
11
from collections import deque

fila = deque()
fila.append('Cliente 1')
fila.append('Cliente 2')
fila.append('Cliente 3')
print(fila)

atendido = fila.popleft()
print(atendido)
print(fila)

A saída será:

1
2
3
deque(['Cliente 1', 'Cliente 2', 'Cliente 3'])
Cliente 1
deque(['Cliente 2', 'Cliente 3'])

Perceba que o primeiro cliente a entrar (Cliente 1) foi o primeiro a sair: esse é o comportamento FIFO.

No deque, append, appendleft, pop e popleft custam aproximadamente O(1), ou seja, inserir ou remover em qualquer uma das pontas é igualmente rápido. A vantagem aparece na comparação com a lista: em uma list, pop(0) e insert(0, valor) custam O(n), porque todos os outros elementos precisam ser deslocados.

Também dá para fazer FIFO no sentido contrário (appendleft para inserir e pop para remover); o importante é inserir por uma ponta e remover pela outra.

Cada Collection dessas resolve um problema real de estrutura de dados, e reconhecer qual usar vem só com prática. Isso é parte do que trabalhamos na Jornada Python, do zero ao avançado:

A Collection namedtuple

Outra estrutura de dados muito útil é o namedtuple, um subtipo de tupla que atribui nomes fixos aos elementos.

Com o namedtuple, podemos criar uma classe de tupla personalizada sem a necessidade de criar uma classe completa.

1
2
3
4
5
6
from collections import namedtuple

Pessoa = namedtuple('Pessoa', ['nome', 'idade'])
p1 = Pessoa('João', 25)
print(p1.nome)  # João
print(p1.idade)  # 25

Aqui, criamos um namedtuple chamado Pessoa com os campos nomee idade.

Em seguida, instanciamos esse tipo de dado e atribuímos valores aos seus campos.

Por fim, podemos acessar esses campos como atributos da instância.

:bulb: Criei o Ebookr.ai, uma plataforma que usa IA para gerar ebooks profissionais sobre qualquer tema - com capa gerada por IA, infográficos automáticos e exportação em PDF. Confere!

A Collection OrderedDict

Por fim, temos o OrderedDict, uma variante do dicionário padrão que mantém a ordem dos elementos de acordo com a inserção.

Vale um esclarecimento: desde o Python 3.7, o dict comum também garante a ordem de inserção. Por isso o OrderedDict perdeu parte da importância, mas ainda tem recursos próprios para quem precisa reordenar elementos.

1
2
3
4
5
6
from collections import OrderedDict

dicionario = OrderedDict()
dicionario['chave1'] = 1
dicionario['chave2'] = 2
print(dicionario)

A saída será (no Python 3.12 ou mais recente):

1
OrderedDict({'chave1': 1, 'chave2': 2})

Em versões anteriores ao 3.12, a representação aparece como OrderedDict([('chave1', 1), ('chave2', 2)]); o conteúdo é o mesmo.

Como o dict comum já preserva a ordem de inserção, hoje o OrderedDict faz sentido quando você precisa das operações extras dele, como move_to_end(), popitem(last=False) e a comparação de igualdade que leva a ordem em conta:

1
2
3
4
5
6
7
8
9
from collections import OrderedDict

d = OrderedDict(a=1, b=2, c=3)
d.move_to_end('a')
print(list(d))
print(d.popitem(last=False))

print({'x': 1, 'y': 2} == {'y': 2, 'x': 1})
print(OrderedDict(x=1, y=2) == OrderedDict(y=2, x=1))

A saída será:

1
2
3
4
['b', 'c', 'a']
('b', 2)
True
False

Conclusão

O pacote collections da biblioteca padrão do Python oferece uma gama de estruturas de dados que complementam os tipos embutidos, trazendo alternativas especializadas para listas, dicionários e outros tipos de dados.

Neste artigo, apresentamos algumas das estruturas de dados mais utilizadas, como o defaultdict, Counter, deque, namedtuple e OrderedDict.

Ao utilizar essas estruturas de dados, é possível melhorar a eficiência do código e deixar o código mais legível e organizado. Com o defaultdict, podemos evitar o uso de condicionais para verificar a existência de chaves em dicionários.

O Counter facilita a contagem de elementos em listas e objetos iteráveis.

O deque oferece inserção e remoção rápidas nas duas pontas, ideal para filas.

O namedtuple permite a criação de classes de tuplas personalizadas de forma mais simples.

E o OrderedDict, embora o dict comum já preserve a ordem de inserção desde o Python 3.7, continua útil quando você precisa reordenar elementos com move_to_end() ou comparar dicionários levando a ordem em conta.

Portanto, conhecer e utilizar as estruturas de dados disponíveis no pacote collections do Python é fundamental para programadores que desejam desenvolver aplicações mais eficientes e organizadas.

Experimente essas estruturas de dados e aproveite ao máximo seus recursos.

Quer praticar essas estruturas e o resto da base do Python em projetos guiados? Conheça a Jornada Python, nosso curso de Python completo.

Começe agora sua Jornada na Programação!

Não deixe para amanhã o sucesso que você pode começar a construir hoje!

#newsletter Olá :wave: Curtiu o artigo? Então faça parte da nossa Newsletter! Privacidade Não se preocupe, respeitamos sua privacidade. Você pode se descadastrar a qualquer momento.