Usando collections.Counter para contar itens no Python

Publicado em: 10/02/2026
Tempo de leitura: 10 minutos

Contar elementos em uma lista ou em qualquer coleção de dados é uma das tarefas mais comuns e fundamentais na programação. Seja para analisar a frequência de palavras em um texto, processar estatísticas de vendas ou organizar dados de usuários, saber usando collections.Counter para contar itens de forma eficiente pode economizar horas de trabalho e linhas de código desnecessárias. Em Python, embora você possa criar contadores manuais usando loops e dicionários, a biblioteca padrão oferece uma ferramenta poderosa e otimizada dentro do módulo collections: a classe Counter.

A linguagem Python é famosa por sua filosofia “baterias incluídas”, o que significa que ela já traz ferramentas prontas para resolver problemas cotidianos. O Counter é um exemplo perfeito disso. Ele é, essencialmente, uma subclasse de dicionário projetada especificamente para contar objetos iteráveis. Ao contrário de um dicionário comum, onde você teria que verificar se uma chave existe antes de incrementar seu valor, o Counter automatiza esse processo, tornando seu código mais limpo, rápido e menos propenso a erros. Neste guia, vamos explorar desde o básico até técnicas avançadas de manipulação de dados com esta ferramenta essencial.

O que é o módulo collections.Counter?

O Counter é uma ferramenta que pertence ao módulo collections do Python. Para entender sua importância, imagine que você tem uma lista de frutas e precisa saber quantas vezes cada uma aparece. Sem o Counter, você provavelmente usaria for em python para percorrer a lista e um dicionário para armazenar a contagem. Com o Counter, esse processo é resumido a uma única linha de código. Ele recebe um iterável (como uma lista, tupla ou string) e retorna um objeto onde os elementos são as chaves e as contagens são os valores.

Além de facilitar a contagem, ele herda todos os métodos de um dicionário comum, mas adiciona funcionalidades extras. De acordo com a documentação oficial da Python Software Foundation, o Counter é uma coleção onde os elementos são armazenados como chaves de dicionário e suas contagens são armazenadas como valores de dicionário. É uma ferramenta de alta performance, escrita parcialmente em C, o que a torna muito mais rápida do que implementações manuais em Python puro para grandes volumes de dados.

Como importar e usar o Counter pela primeira vez

Para começar a usar, o primeiro passo é a importação. Como ele faz parte da biblioteca padrão, você não precisa instalar nada externo. Basta importar diretamente no topo do seu script. Veja como é simples criar sua primeira contagem:

Python
from collections import Counter

# Uma lista simples para teste
frutas = ['maçã', 'banana', 'maçã', 'laranja', 'banana', 'maçã']

# Criando o contador
contagem = Counter(frutas)

print(contagem)
# Saída: Counter({'maçã': 3, 'banana': 2, 'laranja': 1})

Note que o resultado se comporta de forma muito similar aos dicionários em python. A principal diferença é que, se você tentar acessar uma chave que não existe, o Counter retornará zero em vez de gerar um erro de chave (KeyError). Isso é extremamente útil para evitar falhas durante o processamento de fluxos de dados dinâmicos.

Trabalhando com strings e outros iteráveis

O Counter não funciona apenas com listas. Ele pode processar qualquer objeto iterável. Se você passar uma string por exemplo, ele contará a frequência de cada caractere individualmente. Isso é muito utilizado em processamento de linguagem natural básico para identificar letras mais frequentes em um idioma ou detectar padrões em textos.

Python
texto = "abracadabra"
contador_letras = Counter(texto)
print(contador_letras)
# Saída: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})

Você também pode usar o Counter com tuplas em python ou até mesmo passar um dicionário pré-existente ou argumentos nomeados para inicializá-lo. Essa flexibilidade torna a ferramenta versátil para diversos tipos de dados python.

Principais métodos do collections.Counter

Ao usando collections.Counter para contar itens, você ganha acesso a métodos exclusivos que facilitam a análise dos dados coletados. Vamos explorar os três mais importantes que você usará no dia a dia.

O método most_common()

Este é, sem dúvida, o método mais amado desta classe. Ele retorna uma lista das n chaves mais comuns e suas respectivas contagens, ordenadas da maior para a menor. Se você não passar nenhum número como argumento, ele retornará todos os elementos em ordem decrescente de frequência.

Python
animais = ['gato', 'cachorro', 'pássaro', 'gato', 'peixe', 'gato', 'cachorro']
contador = Counter(animais)

# Pegar os 2 animais mais comuns
print(contador.most_common(2))
# Saída: [('gato', 3), ('cachorro', 2)]

O método elements()

O método elements() retorna um iterador que repete cada elemento tantas vezes quanto for a sua contagem. É excelente quando você precisa “descompactar” o contador de volta para uma sequência de itens. Os elementos são retornados em uma ordem arbitrária, mas geralmente seguem a ordem em que foram inseridos originalmente.

O método subtract()

Diferente do método update(), que adiciona contagens, o subtract() subtrai as contagens de outro iterável ou contador. É importante notar que ele pode resultar em contagens negativas ou zero, o que é perfeitamente válido dentro da lógica do Counter.

Operações Matemáticas com Contadores

Uma das funcionalidades mais poderosas do Counter é a capacidade de realizar operações matemáticas como se fossem conjuntos. Você pode somar dois contadores, subtraí-los ou encontrar a interseção e a união entre eles. Essas operações são muito úteis quando você está combinando dados de diferentes fontes de entrada e saída de dados em python.

Considere o seguinte exemplo técnico:

Python
c1 = Counter(a=3, b=1)
c2 = Counter(a=1, b=2)

# Adição (Soma as contagens)
print(c1 + c2) # Counter({'a': 4, 'b': 3})

# Subtração (Mantém apenas resultados positivos)
print(c1 - c2) # Counter({'a': 2})

# Interseção (Pega o mínimo de cada atributo)
print(c1 & c2) # Counter({'a': 1, 'b': 1})

# União (Pega o máximo de cada atributo)
print(c1 | c2) # Counter({'a': 3, 'b': 2})

Essas operações facilitam a limpeza de dados e ajudam a comparar conjuntos de informações rapidamente, sem a necessidade de escrever algoritmos complexos de comparação.

Casos de Uso Reais: Por que usar Counter?

Na prática, usando collections.Counter para contar itens é uma técnica que aparece em diversos cenários profissionais. De acordo com o site de referência em algoritmos Wikipedia (Distribuição de Frequência), a análise de frequência é a base para diversas áreas da estatística e criptografia.

  • Análise de Logs: Identificar quais endereços IP estão acessando seu servidor com mais frequência.
  • Processamento de Inventário: Contar rapidamente produtos em estoque a partir de uma lista de vendas.
  • Ciência de Dados: Verificar a distribuição de classes em um dataset antes de treinar um modelo de Machine Learning.
  • Desenvolvimento de Jogos: Contar o número de itens coletados por um jogador durante uma partida.

Se você estiver trabalhando em um projeto onde precisa mostrar o progresso dessa contagem, pode combinar o Counter com uma barra progresso tqdm python para processar milhões de registros de forma visualmente informativa.

Performance: Counter vs Abordagens Manuais

Muitos iniciantes questionam se vale a pena importar um módulo extra apenas para contar itens. A resposta curta é: sim. A resposta longa envolve performance e legibilidade de código. Um loop for manual com um dicionário no python padrão exige que o interpretador Python execute várias instruções para cada item: verificar a existência da chave, buscar o valor atual, somar um e salvar de volta.

O Counter é implementado de forma altamente otimizada. Para listas com milhões de itens, a diferença de tempo pode ser significativa. Além disso, o código fica muito mais “Pythonico” (termo usado para descrever código que segue as melhores práticas da linguagem), facilitando a leitura por outros desenvolvedores da sua equipe. Menos código escrito significa menos bugs em potencial.

Diferença entre Counter e Dicionários Comuns

CaracterísticaDicionário Comum (dict)collections.Counter
Chaves InexistentesGera KeyErrorRetorna 0 (zero)
InicializaçãoVazio ou pares chave-valorAceita qualquer iterável diretamente
Ordenação de FrequênciaManual via sort()Método most_common() nativo
Operações de ConjuntoNão suportado nativamenteSoma, subtração, união e interseção

Dicas Avançadas para Especialistas

Se você já domina o básico, aqui estão algumas dicas para elevar seu nível usando collections.Counter para contar itens. Você pode usar a função total() (disponível em versões recentes do Python) para obter a soma de todas as contagens instantaneamente. Antes, era necessário usar a função sum(contador.values()).

Outro truque útil é limpar o contador. Como ele se comporta como um dicionário, você pode usar o método clear(). Para transformar um contador de volta em uma lista de elementos únicos, basta usar list(contador), o que é muito mais rápido do que métodos manuais de filtragem de duplicatas. Se estiver depurando seu código no VS Code, lembre-se de conferir nosso guia sobre debug python vscode iniciantes para inspecionar os objetos Counter em tempo real.

Perguntas Frequentes

O Counter pode contar objetos personalizados?

Sim, desde que os objetos sejam “hashable” (possam ser transformados em um código único, como strings, números ou tuplas). Objetos de classes customizadas funcionam se tiverem os métodos __hash__ e __eq__ definidos.

Como contar apenas as chaves com valores positivos?

Embora as operações matemáticas do Counter removam valores zero ou negativos, você pode usar a sintaxe contador += Counter() para remover rapidamente todos os itens com contagens menores ou iguais a zero.

O Counter mantém a ordem de inserção?

A partir do Python 3.7+, os objetos Counter preservam a ordem em que os elementos foram encontrados pela primeira vez, assim como os dicionários padrão da linguagem.

Qual a diferença entre update() e subtract()?

O update() adiciona as contagens de outro iterável à contagem existente, enquanto o subtract() diminui as contagens existentes com base no novo iterável fornecido.

Posso usar o Counter para encontrar a moda estatística?

Certamente! O método most_common(1) retornará o elemento que mais se repete, o que define matematicamente a moda de um conjunto de dados.

Como converter um Counter em um dicionário normal?

Basta usar o construtor padrão: dict(seu_contador). Isso é útil se você for exportar os dados para um formato que não reconheça a classe Counter, como um JSON simples.

Por que meu Counter retornou uma contagem negativa?

Isso geralmente acontece após o uso do método subtract(). Diferente das operações matemáticas de símbolos (+, -, &), o método subtract() permite que as contagens fiquem abaixo de zero.

O Counter funciona com geradores (generators)?

Sim. O Counter consome o gerador completamente para realizar a contagem, sendo uma forma eficiente de processar dados sem carregar tudo na memória de uma vez antes da contagem.

Dominar o collections.Counter é um passo essencial para qualquer programador que deseja escrever código Python eficiente e elegante. Ao integrar essa ferramenta em seu fluxo de trabalho, você estará utilizando o que há de melhor na biblioteca padrão para manipulação de dados. Para continuar evoluindo suas habilidades, explore outros tópicos avançados e continue praticando com projetos reais.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Fundamentos
    Foto do Leandro Hirt

    Como resolver erros de codificação UTF‑8 no Python

    Resolver erros de codificação UTF-8 no Python pode parecer um desafio intimidador para quem está começando, mas é um dos

    Ler mais

    Tempo de leitura: 11 minutos
    21/02/2026
    Fundamentos
    Foto do Leandro Hirt

    FileNotFoundError – Resolva esse erro de caminhos no Python

    Você acabou de escrever um script incrível, configurou toda a lógica de programação e, na hora de executar, o terminal

    Ler mais

    Tempo de leitura: 10 minutos
    20/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Como criar e usar dataclasses em Python facilmente

    No vasto ecossistema da programação, gerenciar dados em classes pode, muitas vezes, parecer uma tarefa repetitiva e cansativa. Se você

    Ler mais

    Tempo de leitura: 9 minutos
    18/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Entendendo o operador walrus (:=) no Python

    O ecossistema do Python é conhecido por sua simplicidade e legibilidade, mas isso não significa que a linguagem pare de

    Ler mais

    Tempo de leitura: 9 minutos
    18/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Entendendo o módulo collections em Python

    O módulo collections é uma das ferramentas mais poderosas e subutilizadas da biblioteca padrão do Python. Embora os tipos de

    Ler mais

    Tempo de leitura: 10 minutos
    17/02/2026
    Fundamentos
    Foto do Leandro Hirt

    Hash de senhas em Python: Crie hashes seguros em minutos

    Garantir a segurança dos dados dos usuários é uma das responsabilidades mais críticas de qualquer desenvolvedor de software. Quando falamos

    Ler mais

    Tempo de leitura: 10 minutos
    16/02/2026