En este tutorial, aprenderá a utilizar el objeto contador del módulo collection de Python.
Cuando trabaje con secuencias largas en Python, por ejemplo, listas o cadenas de Python, es posible que a veces necesite almacenar los elementos que aparecen en la secuencia y el number of times that aparecen.
Un diccionario de Python es una estructura de datos incorporada adecuada para este tipo de aplicaciones. Sin embargo, la clase Counter de Python, del módulo collections, puede simplificar esta tarea construyendo un contador, que es un diccionario de elementos y su recuento en la secuencia.
En los próximos minutos, aprenderá lo siguiente:
- Utilizar el objeto contador de Python
- Crear un diccionario de Python para almacenar valores de recuento de elementos en un iterable
- Reescribir el diccionario utilizando el contador de Python con una sintaxis simplificada
- Realizar operaciones como actualizar y restaurar elementos, encontrar la intersección entre dos objetos contador
- Obtener los elementos más frecuentes en el contador utilizando el método
most_common()
¡Empecemos!
Módulo de colecciones de Python y clase contador
A menudo utilizará un diccionario Python es para almacenar los elementos y su recuento en un iterable. Los elementos y el recuento se almacenan como claves y valores, respectivamente.
Como la clase Contador
forma parte del módulo de colecciones incorporado de Python, puede importarla en su script de Python de la siguiente forma
from colecciones import Contador
Después de importar la clase Contador como se ha mencionado, puede instanciar un objeto contador como se muestra:
<objeto_contador> = Contador(iterable)
Aquí
iterable
es cualquier iterable válido de Python, como una lista, cadena o tupla de Python.- Los elementos del iterable deben ser hashables.
Ahora que sabemos cómo utilizar Counter
para crear objetos contadores a partir de cualquier iterable de Python, empecemos a codificar.
Los ejemplos utilizados en este tutorial se pueden encontrar en este gist de GitHub.
Cómo crear un objeto contador a partir de iterables de Python

Vamos a crear una cadena Python, digamos, 'renacimiento' y llamémosla palabra
.
>>> palabra = "renacimiento"
Nuestro objetivo es crear un diccionario en el que cada letra de la
cadena palabra se asigna al número de veces que aparece en la cadena. Un enfoque es utilizar bucles for como se muestra:
>>> cuenta_letras = {}
>>> para letra en palabra:
... si letra no está en cuenta_letras:
... cuenta_letras<x>[letra]</x> = 0
... cuenta_letras<x>[letra]</x> = 1
...
>>> cuenta_letras
{'r': 1, 'e': 2, 'n': 2, 'a': 2, 'i': 1, 's': 2, 'c': 1}
Analicemos lo que hace el fragmento de código anterior:
- Inicializa
letter_count
a un diccionario Python vacío. - Hace un bucle a través de la cadena de
palabras
. - Comprueba si
la
letra está presente en el diccionarioletter_count
. - Si la
letra
no está presente, la añade con un valor de0
y posteriormente incrementa el valor en 1. - Por cada aparición de la
letra
enla
palabra, el valor correspondientea
la letra se incrementa en 1. - Esto continúa hasta que realizamos un bucle a través de toda la cadena.
Hemos construido el diccionario cuenta_letras
por nuestra cuenta utilizando el bucle para para recorrer la cadena palabra
.
Ahora vamos a utilizar la clase Counter del módulo collections. Sólo tenemos que pasar la cadena palabra
a Counter()
para obtener letter_count
sin tener que hacer bucles a través de iterables.
>>> from collections import Contador
>>> cuenta_letras = Contador(palabra)
>>> cuenta_letras
Contador({'e': 2, 'n': 2, 'a': 2, 's': 2, 'r': 1, 'i': 1, 'c': 1})
El objeto contador también es un diccionario Python. Podemos utilizar la función incorporada isinstance()
para verificarlo:
>>> isinstance(cuenta_letras,dict)
True
Como se ve, isinstance(cuenta_cartas, dict)
devuelva True
indicando que el objeto contador cuenta_cartas
es una instancia de la clase dict
de Python.
Modificación del objeto contador
Hasta ahora, hemos aprendido a crear objetos contadores a partir de cadenas de Python.
También puede modificar objetos contadores actualizándolos con elementos de otro iterable o restándoles otro iterable.
Actualizando un Contador con Elementos de Otro Iterable
Inicialicemos otra cadena otra_palabra
:
>>> otra_palabra = "efervescencia"
Supongamos que queremos actualizar el objeto contador cuenta_cartas
con los elementos de la cadena otra_palabra
.
Podemos utilizar el método update()
en el objeto contador letter_count
.
>>> letter_count.update(otra_palabra)
>>> letter_count
Counter({'e': 7, 'n': 3, 's': 3, 'c': 3, 'r': 2, 'a': 2, 'f': 2, 'i': 1, 'v': 1})
En la salida, vemos que el objeto contador se ha actualizado para incluir también las letras y su número de apariciones de otra_palabra
.
Restar elementos de otro iterable
Ahora vamos a restar el valor de otra_palabra
del objeto contador_de_letras
. Para ello, podemos utilizar el método subtract()
. Al utilizar <objeto_contador>.subtract(<algo_iterable>
) restamos los valores correspondientes a los elementos de <algo_iterable>
del <objeto_contador>.
Restemos otra_palabra
de cuenta_letras
.
>>> cuenta_letras.resta(otra_palabra)
>>> cuenta_letras
Contador({'e': 2, 'n': 2, 'a': 2, 's': 2, 'r': 1, 'i': 1, 'c': 1, 'f': 0, 'v': 0})
Vemos que se han restado los valores correspondientes a las letras de otra_palabra
, pero no se han eliminado las claves añadidas 'f' y 'v'. Ahora se asignan a un valor 0.
Nota: Aquí hemos pasado
otra_palabra
, una cadena de Python, a la llamada al métodosustraer()
. También podemos pasar un objeto contador de Python u otro iterable.
Intersección entre dos objetos contadores en Python

A veces puede querer encontrar la intersección entre dos objetos contadores de Python para identificar qué claves son comunes entre ambos.
Creemos un objeto contador, digamos, letra_cuenta_2
, a partir de la cadena otra_palabra
efervescencia
>>> otra_palabra = "efervescencia"
>>> cuenta_letras_2 = Contador(otra_palabra)
>>> cuenta_letras_2
Contador({'e': 5, 'f': 2, 'c': 2, 'r': 1, 'v': 1, 's': 1, 'n': 1})
Podemos utilizar el operador simple & para encontrar la intersección entre cuenta_letras
y cuenta_letras_2
.
>>> cuenta_letras & cuenta_letras_2
Contador({'e': 2, 'r': 1, 'n': 1, 's': 1, 'c': 1})
Observe cómo obtiene las claves y el número de ocurrencias comunes a las dos palabras. Tanto 'renacimiento' como 'efervescencia' contienen dos apariciones de 'e', y una aparición cada una de 'r', 'n', 's' y 'c' en común.
Encontrar los elementos más frecuentes utilizando most_common
Otra operación común sobre el objeto contador de Python es encontrar los elementos que aparecen con más frecuencia.
Para obtener los k elementos más comunes del contador, puede utilizar el método most_common ()
en el objeto contador. Aquí, llamamos a most_common
() es letter_count
para encontrar las tres letras que aparecen con más frecuencia.
>>> letter_count.most_common(3)
[('e', 2), ('n', 2), ('a', 2)]
Vemos que las letras 'e', 'n' y 'a' aparecen dos veces en la palabra 'renacimiento'.
Esto es especialmente útil si el contador contiene un gran número de entradas y le interesa trabajar con las claves más comunes.
Conclusión
He aquí un rápido repaso de lo que hemos aprendido en el tutorial:
- La clase
Contador
del módulo de colecciones incorporado de Python puede utilizarse para obtener un diccionario de valores de recuento de todos los elementos de cualquier iterable. Debe asegurarse de que todos los elementos del iterable son hashables. - Puede actualizar el contenido de un objeto contador de Python con el contenido de otro objeto contador o de cualquier otro iterable utilizando el método
update()
con la sintaxis:counter1.update(counter2)
. Tenga en cuenta que puede utilizar cualquier iterable en lugar decontador2
. - Si desea eliminar el contenido de uno de los iterables del contador actualizado, puede utilizar el método
subtract()
:counter1.subtract(counter2)
. - Para encontrar los elementos comunes entre dos objetos contadores, puede utilizar el operador &. Dados dos contadores
contador1
ycontador2
, contador1& contador2
devuelva la intersección de estos dos objetos contadores. - Para obtener los k elementos más frecuentes de un contador, puede utilizar el método most_common
()
.counter.most_common(k)
devuelve los k elementos más frecuentes y sus respectivos recuentos.
A continuación, aprenda a utilizar default dict, otra clase del módulo collections. Puede utilizar default dict en lugar de un diccionario normal de Python para manejar las claves que faltan.