Uso Detalhado do Módulo collections em Python

O módulo collections em Python é uma biblioteca embutida que oferece alternativas avançadas aos contêineres padrão, como dicionários, listas, conjuntos e tuplas. Ele fornece estruturas de dados especializadas para tarefas comuns, facilitando o desenvolvimento com funcionalidades adicionais.

import collections
print(dir(collections))
# Saída: ['ChainMap', 'Counter', 'OrderedDict', 'defaultdict', 'deque', 'namedtuple', ...]

A seguir, exploramos os componentes mais utilizados deste módulo.

2. Componentes Principais

  • namedtuple(): Cria tuplas com campos nomeados, melhorando a legibilidade.
  • deque: Lista duplamente encadeada para operações rápidas nas extremidades.
  • defaultdict: Dicionário com valores padrão para chaves ausantes.
  • OrderedDict: Dicionário que mantém a ordem de inserção (mais relevante antes do Python 3.7).
  • Counter: Ferramenta para contar elementos em iteráveis.

namedtuple() - Tuplas Nomeadas

Parâmetros:

collections.namedtuple(nome_tipo, nomes_campos, *, renomear=False, padroes=None, modulo=None)

  • nome_tipo: Nome da nova classe de tupla.
  • nomes_campos: Sequência de strings para os campos.
  • renomear: Se True, corrige nomes de campos inválidos automaticamente.
  • padroes: Valores padrão para os campos (Python 3.7+).
  • modulo: Define o atributo __module__ (Python 3.6+).

Exemplo de Uso: Definindo uma tupla para representar um produto.

from collections import namedtuple

Produto = namedtuple('Produto', ['nome', 'preco'])
item1 = Produto('Laptop', 1500)
item2 = Produto('Mouse', 50)
print(item1)  # Produto(nome='Laptop', preco=1500)
print(item2)  # Produto(nome='Mouse', preco=50)

# Verificando o tipo
print(isinstance(item1, Produto))  # True
print(isinstance(item1, tuple))    # True

# Usando _make para criar a partir de uma lista
dados = ['Teclado', 200]
item3 = Produto._make(dados)
print(item3)  # Produto(nome='Teclado', preco=200)

# Usando _replace para modificar um campo
item1 = item1._replace(preco=1400)
print(item1)  # Produto(nome='Laptop', preco=1400)

deque - Fila Duplamente Encadeada

Parâmetros:

collections.deque([iteravel[, maxlen]])

  • iteravel: Dados iniciais (opcional).
  • maxlen: Comprimento máximo (opcional); se definido, descarta itens da extremidade oposta ao adicionar novos.

Exemplo de Uso:

from collections import deque

fila = deque([10, 20, 30], maxlen=5)
fila.append(40)
print(fila)  # deque([10, 20, 30, 40], maxlen=5)

print(fila.popleft())  # 10
print(fila)  # deque([20, 30, 40], maxlen=5)

fila.extend([50, 60])
print(fila)  # deque([20, 30, 40, 50, 60], maxlen=5)

print(fila.index(40))  # 2

fila.remove(50)
print(fila)  # deque([20, 30, 40, 60], maxlen=5)

fila.reverse()
print(fila)  # deque([60, 40, 30, 20], maxlen=5)

print(fila.maxlen)  # 5

Métodos adicionais incluem appendleft, pop, insert, rotate, entre outros, para manipulação eficiente.

defaultdict - Dicionário com Valor Padrão

Quando uma chave não existe, retorna um valor padrão definido por uma fábrica.

Exemplo de Uso: Contagem de palavras.

from collections import defaultdict

contagem = defaultdict(int)
palavras = ['maçã', 'banana', 'maçã', 'laranja', 'banana', 'banana']
for palavra in palavras:
    contagem[palavra] += 1
print(contagem)  # defaultdict(<class>, {'maçã': 2, 'banana': 3, 'laranja': 1})
</class>

Outro uso com list para agrupamento:

agrupamento = defaultdict(list)
pares = [('cor', 'azul'), ('tamanho', 'M'), ('cor', 'vermelho'), ('tamanho', 'G')]
for chave, valor in pares:
    agrupamento[chave].append(valor)
print(agrupamento)  # defaultdict(<class>, {'cor': ['azul', 'vermelho'], 'tamanho': ['M', 'G']})
</class>

Isso simplifica operações que normalmante exigiriam verificações manuais de chaves.

OrderedDict - Dicionário Ordenado

Mantém a ordem de inserção dos itens. No Python 3.7+, os dicionários paddrão também preservam a ordem, mas OrderedDict oferece métodos adicionais.

Exemplo de Uso:

from collections import OrderedDict

dados = OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])
print(dados)

# Remover itens em ordem específica
print(dados.popitem(last=True))   # ('d', 4)
print(dados.popitem(last=False))  # ('a', 1)
print(dados)  # OrderedDict([('b', 2), ('c', 3)])

# Mover uma chave para o início ou fim
dados.move_to_end('c', last=False)
print(dados)  # OrderedDict([('c', 3), ('b', 2)])

Counter - Contador de Elementos

Subclasse de dict otimizada para contar elementos hashable.

Exemplo de Uso:

from collections import Counter

texto = 'programar em python é divertido'
contagem_texto = Counter(texto)
print(contagem_texto)  # Counter({'r': 4, 'a': 3, 'e': 3, ...})

lista_cores = ['azul', 'vermelho', 'azul', 'verde', 'azul', 'vermelho']
contagem_cores = Counter(lista_cores)
print(contagem_cores)  # Counter({'azul': 3, 'vermelho': 2, 'verde': 1})

# Método most_common para elementos frequentes
print(contagem_cores.most_common(2))  # [('azul', 3), ('vermelho', 2)]

# Método elements para iterar sobre elementos repetidos
c = Counter(x=3, y=2, z=0)
print(list(c.elements()))  # ['x', 'x', 'x', 'y', 'y']

# Método subtract para subtrair contagens
c1 = Counter(a=5, b=3)
c2 = Counter(a=2, b=4)
c1.subtract(c2)
print(c1)  # Counter({'a': 3, 'b': -1})

Tags: Python Collections namedtuple deque defaultdict

Publicado em 7-4 06:09