Como usar o contador do Python no módulo Collections

Neste tutorial, você aprenderá como usar o objeto contador do módulo de coleção do Python.

Ao trabalhar com sequências longas em Python, digamos, listas ou strings Python, às vezes pode ser necessário armazenar os itens que aparecem na sequência e o número de vezes que eles aparecem.

Um dicionário Python é uma estrutura de dados incorporada adequada para tais aplicativos. No entanto, a classe Counter do Python do módulo collections pode simplificar isso — construindo um contador — que é um dicionário de itens e sua contagem na sequência.

Nos próximos minutos, você aprenderá o seguinte:

  • Use o objeto contador do Python
  • Crie um dicionário Python para armazenar valores de contagem de itens em um iterável
  • Reescreva o dicionário usando o contador do Python com uma sintaxe simplificada
  • Execute operações como atualização e subtração de elementos, encontrando interseção entre dois objetos de contagem
  • Obtenha os itens mais frequentes no contador usando o método most_common()

Vamos começar!

Python Collections Module e Counter Class

Muitas vezes, você usará um dicionário Python para armazenar os itens e sua contagem em um iterável. Os itens e a contagem são armazenados como chaves e valores, respectivamente.

Como a classe Counter faz parte do módulo de coleções integrado do Python, você pode importá-la em seu script Python da seguinte forma:

from collections import Counter

Depois de importar a classe Counter conforme mencionado, você pode instanciar um objeto contador conforme mostrado:

<counter_object> = Counter(iterable)

Aqui:

  • iterable é qualquer iterável do Python válido, como lista, string ou tupla do Python.
  • Os itens no iterável devem ser passíveis de hash.
  Como remover “Continue Watching” no Netflix

Agora que sabemos como usar Counter para criar objetos de contador de qualquer Python iterável, vamos começar a codificar.

Os exemplos usados ​​neste tutorial podem ser encontrados nesta essência do GitHub.

Como criar um objeto contador a partir de iteráveis ​​do Python

Vamos criar uma string Python, digamos, ‘renascimento’ e chamá-la de palavra.

>>> word = "renaissance"

Nosso objetivo é criar um dicionário onde cada letra na cadeia de palavras seja mapeada para o número de vezes que ocorre na cadeia. Uma abordagem é usar loops for como mostrado:

>>> letter_count = {}
>>> for letter in word:
...     if letter not in letter_count:
...         letter_count[letter] = 0
...     letter_count[letter] += 1
...
>>> letter_count
{'r': 1, 'e': 2, 'n': 2, 'a': 2, 'i': 1, 's': 2, 'c': 1}

Vamos analisar o que o trecho de código acima faz:

  • Inicializa letter_count para um dicionário Python vazio.
  • Percorre a string de palavras.
  • Verifica se a letra está presente no dicionário letter_count.
  • Se a letra não estiver presente, ele a adiciona com um valor de 0 e subsequentemente incrementa o valor em 1.
  • Para cada ocorrência de letra na palavra, o valor correspondente à letra é incrementado em 1.
  • Isso continua até percorrermos toda a string.

Construímos o dicionário letter_count — por conta própria — usando o loop for para percorrer a string word.

Agora vamos usar a classe Counter do módulo collections. Só precisamos passar a palavra string para Counter() para obter letter_count sem ter que percorrer iteráveis.

>>> from collections import Counter
>>> letter_count = Counter(word)
>>> letter_count
Counter({'e': 2, 'n': 2, 'a': 2, 's': 2, 'r': 1, 'i': 1, 'c': 1})

O objeto contador também é um dicionário Python. Podemos usar a função integrada isinstance() para verificar isso:

>>> isinstance(letter_count,dict)
True

Como visto, isinstance(letter_count, dict) retorna True indicando que o objeto counter letter_count é uma instância da classe dict do Python.

  O que é topologia de rede em redes de computadores

Modificando o Objeto Contador

Até agora, aprendemos a criar objetos de contador a partir de strings do Python.

Você também pode modificar os objetos do contador atualizando-os com elementos de outro iterável ou subtraindo outro iterável deles.

Atualizando um contador com elementos de outro iterável

Vamos inicializar outra string another_word:

>>> another_word = "effervescence"

Suponha que gostaríamos de atualizar o objeto contador letter_count com os itens da string another_word.

Podemos usar o método update() no objeto contador letter_count.

>>> letter_count.update(another_word)
>>> letter_count
Counter({'e': 7, 'n': 3, 's': 3, 'c': 3, 'r': 2, 'a': 2, 'f': 2, 'i': 1, 'v': 1})

Na saída, vemos que o objeto contador foi atualizado para incluir também as letras e seu número de ocorrências de another_word.

Subtraindo elementos de outro iterável

Agora vamos subtrair o valor de another_word do objeto letter_count. Para fazer isso, podemos usar o método subtract(). Usando .subtract() subtrai os valores correspondentes aos itens em do .

Vamos subtrair outra_palavra de letter_count.

>>> letter_count.subtract(another_word)
>>> letter_count
Counter({'e': 2, 'n': 2, 'a': 2, 's': 2, 'r': 1, 'i': 1, 'c': 1, 'f': 0, 'v': 0})

Vemos que os valores correspondentes às letras em outra_palavra foram subtraídos, mas as chaves adicionadas ‘f’ e ‘v’ não foram removidas. Eles agora mapeiam para um valor de 0.

Nota: Aqui, passamos outra_palavra, uma string Python, para a chamada do método subtract(). Também podemos passar um objeto contador Python ou outro iterável.

Interseção entre dois objetos de contador em Python

Às vezes, você pode querer encontrar a interseção entre dois objetos de contador do Python para identificar quais chaves são comuns entre os dois.

Vamos criar um objeto contador, digamos, letter_count_2, a partir da string another_word ‘efervescência’.

>>> another_word = "effervescence"
>>> letter_count_2 = Counter(another_word)
>>> letter_count_2
Counter({'e': 5, 'f': 2, 'c': 2, 'r': 1, 'v': 1, 's': 1, 'n': 1})

Podemos usar o operador simples & para encontrar a interseção entre letter_count e letter_count_2.

>>> letter_count & letter_count_2
Counter({'e': 2, 'r': 1, 'n': 1, 's': 1, 'c': 1})

Observe como você obtém as chaves e o número de ocorrências comuns às duas palavras. Tanto ‘renascimento’ quanto ‘efervescência’ contêm duas ocorrências de ‘e’ e uma ocorrência de ‘r’, ‘n’, ‘s’ e ‘c’ em comum.

  Como alterar o plano de fundo do Google em um Chromebook

Encontre os itens mais frequentes usando most_common

Outra operação comum no objeto contador do Python é localizar os itens que ocorrem com mais frequência.

Para obter os k itens mais comuns no contador, você pode usar o método most_common() no objeto contador. Aqui, chamamos most_common() em letter_count para encontrar as três letras que ocorrem com mais frequência.

>>> letter_count.most_common(3)
[('e', 2), ('n', 2), ('a', 2)]

Vemos que as letras ‘e’, ​​’n’ e ‘a’ ocorrem duas vezes na palavra ‘renascimento’.

Isso é especialmente útil se o contador contiver um grande número de entradas e você estiver interessado em trabalhar com as chaves mais comuns.

Conclusão

Aqui está uma rápida revisão do que aprendemos no tutorial:

  • A classe Counter do módulo de coleções integrado do Python pode ser usada para obter um dicionário de valores de contagem de todos os itens em qualquer iterável. Você deve certificar-se de que todos os itens no iterável sejam passíveis de hash.
  • Você pode atualizar o conteúdo de um objeto de contador do Python com o conteúdo de outro objeto de contador ou qualquer outro iterável usando o método update() com a sintaxe: counter1.update(counter2). Observe que você pode usar qualquer iterável no lugar de counter2.
  • Se quiser remover o conteúdo de um dos iteráveis ​​do contador atualizado, você pode usar o método subtract(): counter1.subtract(counter2).
  • Para encontrar os elementos comuns entre dois objetos contadores, você pode usar o operador &. Dados dois contadores contador1 e contador2, contador1 e contador2 retorna a interseção desses dois objetos contadores.
  • Para obter os k itens mais frequentes em um contador, você pode usar o método most_common(). counter.most_common(k) fornece os k itens mais comuns e as respectivas contagens.

Em seguida, aprenda como usar o dict padrão, outra classe no módulo de coleções. Você pode usar o dict padrão em vez de um dicionário regular do Python para lidar com as chaves ausentes.