Introdução
O módulo collections integrado ao Python oferece várias estruturas de dados poderosas que ampliam os recursos dos tipos padrão. Neste tutorial, exploraremos algumas dessas coleções avançadas, como defaultdict, Counter, deque e namedtuple, e demonstraremos como elas podem simplificar seu código e melhorar o desempenho ao lidar com tarefas complexas de processamento de dados.
defaultdict Subclasse
O defaultdict é uma subclasse do dict integrado que retorna um valor padrão quando uma chave está ausente. Isso elimina a necessidade de verificações de existência de chaves.
#|label: defaultdict-example
from collections import defaultdict
# Crie um defaultdict com lista como fábrica padrão.
dd = defaultdict(list)
# Anexando valores a chaves.
dd["fruits"].append("apple")
dd["fruits"].append("banana")
dd["vegetables"].append("carrot")
print("defaultdict:", dict(dd))Resultados:
defaultdict: {'fruits': ['apple', 'banana'], 'vegetables': ['carrot']}Counter Subclasse
A classe Counter é útil para contar objetos hashable. Elas facilitam a contagem de ocorrências e a execução de operações como encontrar os elementos mais comuns.
#|label: counter-example
from collections import Counter
data = ["apple", "banana", "apple", "orange", "banana", "apple"]
counter = Counter(data)
print("Counter:", counter)
print("Most common:", counter.most_common(2))Resultados:
Counter: Counter({'apple': 3, 'banana': 2, 'orange': 1})
Most common: [('apple', 3), ('banana', 2)]deque Subclasse
deque (fila dupla) suporta anexações e popagens rápidas de ambas as extremidades, tornando-a ideal para implementar filas ou pilhas.
#|label: deque-example
from collections import deque
# Crie uma fila dupla e adicione elementos em ambas as extremidades.
d = deque([1, 2, 3])
d.append(4)          # Anexando à direita
d.appendleft(0)      # Anexar à esquerda
print("Deque:", d)
# Popular elementos de ambas as extremidades.
right = d.pop()
left = d.popleft()
print("After popping, deque:", d)
print("Popped from right:", right, "and left:", left)Resultados:
Deque: deque([0, 1, 2, 3, 4])
After popping, deque: deque([1, 2, 3])
Popped from right: 4 and left: 0namedtuple Subclasse
namedtuple fornece uma maneira de criar tipos de objetos leves com campos nomeados. Eles são imutáveis e podem ser usados como tuplas regulares, melhorando a legibilidade do código.
#|label: namedtuple-example
from collections import namedtuple
# Defina uma namedtuple chamada 'Point'.
Point = namedtuple("Point", ["x", "y"])
# Crie uma instância Point.
p = Point(x=10, y=20)
print("Namedtuple Point:", p)
print("X coordinate:", p.x)
print("Y coordinate:", p.y)Resultados:
Namedtuple Point: Point(x=10, y=20)
X coordinate: 10
Y coordinate: 20Coleções adicionais
Embora os exemplos acima abranjam as coleções avançadas mais comuns, o módulo collections do Python também inclui:
- OrderedDict: Embora os dicionários Python 3.7+ mantenham a ordem de inserção, OrderedDict pode ser útil para operações de ordenação específicas.
 
- ChainMap: Para gerenciar vários dicionários como um só.
 
- UserDict, UserList e UserString: Para facilitar a subclassificação de tipos embutidos.
Conclusão
Estruturas de dados avançadas no módulo collections podem simplificar muitas tarefas, fornecendo funcionalidades integradas que vão além dos tipos de dados padrão. O uso de ferramentas como defaultdict, Counter, deque e namedtuple pode resultar em um código mais limpo, eficiente e legível. Experimente essas coleções para ver como elas podem melhorar seu processamento de dados e a lógica da aplicação.
Leitura adicional
- Guia completo para estruturas de dados Python
- Tratamento de estruturas de dados aninhadas em Python
- Operações avançadas em estruturas de dados em Python
- Comparações de desempenho e práticas recomendadas para estruturas de dados Python
Boa programação e aproveite para dominar as coleções avançadas do Python!
Explore mais artigos
Aqui estão mais artigos da mesma categoria para ajudá-lo a se aprofundar no tópico.
Reuso
Citação
@online{kassambara2024,
  author = {Kassambara, Alboukadel},
  title = {Coleções avançadas do Python: defaultdict, Counter, deque,
    namedtuple, etc.},
  date = {2024-02-09},
  url = {https://www.datanovia.com/pt/learn/programming/python/additional-tutorials/collections-module.html},
  langid = {pt}
}
