Módulo de coleções Python: tipos avançados de contêineres

Aprenda a usar o módulo de coleções do Python. Master Counter, defaultdict, nomeadotuple, deque e como simplificar estruturas de dados complexas.

Experimente no Editor

Visão geral

Embora os contêineres básicos do Python – listas, dicionários, conjuntos e tuplas – sejam suficientes para a maioria das tarefas, programas complexos geralmente exigem estruturas de dados especializadas. Para resolver isso, Python fornece o módulo integrado `coleções`. Este módulo contém tipos de dados de contêiner de alto desempenho projetados para resolver tarefas comuns de programação com mais eficiência e com sintaxe mais limpa e autodocumentada.

Entre as classes mais úteis está `defaultdict`, que atua como um dicionário normal, mas inicializa automaticamente as chaves ausentes com um valor padrão (como uma lista vazia ou inteiro zero), eliminando a necessidade de verificações detalhadas de chaves. Outra potência é a classe `Counter`, otimizada especificamente para registrar ocorrências de itens em um iterável. Para filas e pilhas rápidas, `deque` (fila dupla) oferece inserções e exclusões `O(1)` em ambas as extremidades, ao contrário de listas que sofrem de deslocamentos `O(N)`.

Finalmente, o módulo oferece `namedtuple`, que cria objetos leves, semelhantes a tuplas, que podem ser acessados usando notação de ponto, bem como índices tradicionais (por exemplo, `point.x` em vez de `point[0]`). Isso oferece a velocidade e a imutabilidade de uma tupla com a legibilidade de uma classe. Incorporar o módulo de coleções em seu fluxo de trabalho garante que seu código permaneça elegante, com bom desempenho e limpo.

Saída de código e execução

Contando palavras usando Counter e organizando grupos de dicionários com defaultdict.

collections_demo.py
Experimente no Editor
from collections import Counter, defaultdict, namedtuple

# 1. Counter: Tallying items
votes = ["yes", "no", "yes", "yes", "no"]
vote_counts = Counter(votes)
print(f"Vote Counts: {vote_counts}")
print(f"Most common: {vote_counts.most_common(1)}")

# 2. defaultdict: Grouping values
grouped_data = defaultdict(list)
grouped_data["engineers"].append("Alice")
grouped_data["engineers"].append("Bob")
print(f"Grouped Data: {dict(grouped_data)}")

# 3. namedtuple: Clean records
Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(f"Point x: {p.x}, Point y: {p.y}")
Saída terminal
Vote Counts: Counter({'yes': 3, 'no': 2})
Most common: [('yes', 3)]
Grouped Data: {'engineers': ['Alice', 'Bob']}
Point x: 10, Point y: 20

Implementação passo a passo

  • Analisando arquivos de log para contar ocorrências de erros via Counter
  • Construindo filas de prioridade ou agendadores de tarefas usando deque
  • Representando dimensões de coordenadas ou registros de dados usando o NamedTuple

Perguntas frequentes

Por que o deque é mais rápido que a lista para operações de fila?

Uma lista requer o deslocamento de todos os elementos subsequentes na memória ao inserir ou excluir pela frente (O(N)). Um deque é implementado como uma lista duplamente vinculada, permitindo operações O(1) em ambas as extremidades.

Posso alterar elementos de um nomeadotuple?

Não. Como as tuplas nomeadas herdam das tuplas padrão, elas são totalmente imutáveis. Você deve usar o método ._replace() para retornar uma nova instância modificada.

Tópicos Relacionados

Recursos Python recomendados

Expanda seu conhecimento com tutoriais interativos relacionados, folhas de dicas e comparações de código.