En este tutorial, aprenderá a usar el objeto de contador del módulo de colección de Python.
Cuando trabaja con secuencias largas en Python, por ejemplo, listas o cadenas de Python, a veces puede necesitar almacenar el artículos que aparecen en la secuencia y el numero de veces ellos aparecen.
Un diccionario de Python es una estructura de datos incorporada adecuada para tales aplicaciones. Sin embargo, la clase Counter de Python del módulo de colecciones puede simplificar esto mediante la construcción de un contador, que es un diccionario de elementos y su recuento en la secuencia.
En los próximos minutos, aprenderá lo siguiente:
- Usar el objeto de contador de Python
- Cree un diccionario de Python para almacenar valores de conteo de elementos en un iterable
- Reescribe el diccionario usando el contador de Python con una sintaxis simplificada
- Realice operaciones como actualizar y restar elementos, encontrar la intersección entre dos objetos contadores
- Obtenga los artículos más frecuentes en el mostrador usando el
most_common()
Método
¡Vamos a empezar!
Python Collections Module and Counter Class
A menudo usará un Diccionario de Python es almacenar los elementos y su recuento en un iterable. Los elementos y el recuento se almacenan como claves y valores, respectivamente.
A este tenor, Counter
class es parte del módulo de colecciones incorporado de Python, puede importarlo en su secuencia de comandos de Python de la siguiente manera:
from collections import Counter
Después de importar la clase Counter como se mencionó, puede crear una instancia de un objeto contador como se muestra:
<counter_object> = Counter(iterable)
Aquí:
iterable
es cualquier iterable de Python válido, como una lista, una cadena o una tupla de Python.- Los elementos en el iterable deben ser mezclable.
Ahora que sabemos cómo usar Counter
para crear objetos de contador a partir de cualquier iterable de Python, comencemos a codificar.
Los ejemplos utilizados en este tutorial se pueden encontrar en esta esencia de GitHub.
How to Create a Counter Object from Python Iterables

Creemos una cadena de Python, digamos, 'renacimiento' y llámela word
.
>>> word = "renaissance"
Nuestro objetivo es crear un diccionario donde cada letra del word
cadena se asigna al número de veces que aparece en la cadena. Un enfoque es usar bucles for como se muestra:
>>> 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}
Analicemos lo que hace el fragmento de código anterior:
- Inicializa
letter_count
a un diccionario Python vacío. - Bucles a través de la
word
cadena. - Comprueba si
letter
está presente en elletter_count
diccionario. - If
letter
no está presente, lo suma con un valor de0
y posteriormente incrementa el valor en 1. - Para cada ocurrencia de
letter
inword
, el valor correspondiente aletter
se incrementa en 1. - Esto continúa hasta que recorremos toda la cadena.
Construimos el letter_count
diccionario—por nuestra cuenta—usando en bucle para recorrer la cuerda word
.
Ahora usemos la clase Counter del módulo de colecciones. Sólo tenemos que pasar en el word
cadena a Counter()
para obtener letter_count
sin tener que recorrer los iterables.
>>> 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})
El contraobjeto también es un Diccionario de Python. Podemos usar el incorporado isinstance()
función para verificar esto:
>>> isinstance(letter_count,dict)
True
Como se vio, isinstance(letter_count, dict)
devoluciones True
indicando que el contraobjeto letter_count
es una instancia de Python dict
clase.
Modifying the Counter Object
Hasta ahora, hemos aprendido a crear objetos de contador a partir de cadenas de Python.
También puede modificar objetos de contador actualizándolos con elementos de otro iterable o restando otro iterable de ellos.
Actualización de un contador con elementos de otro iterable
Vamos a inicializar otra cadena another_word
:
>>> another_word = "effervescence"
Supongamos que nos gustaría actualizar el letter_count
contraobjeto con los elementos de another_word
cadena.
Podemos usar el update()
método en el 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})
En el resultado, vemos que el objeto contador se ha actualizado para incluir también las letras y su número de ocurrencias desde another_word
.
Restar elementos de otro iterable
Ahora vamos a restar el valor de another_word
desde letter_count
objeto. Para ello, podemos utilizar el subtract()
método. Utilizando <counter-object>.subtract(<some-iterable>)
resta los valores correspondientes a los elementos en <some-iterable>
del desplegable <counter-object>
.
vamos a restar another_word
desde 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 los valores correspondientes a las letras en another_word
se han sustraído, pero las teclas agregadas 'f' y 'v' no se eliminan. Ahora se asignan a un valor de 0.
Nota:: Aquí, hemos pasado en
another_word
, una cadena de Python, a lasubtract()
llamada de método. También podemos pasar un objeto contador de Python u otro iterable.
Intersection Between Two Counter Objects in Python

Es posible que a veces desee encontrar el intersección entre dos objetos de contador de Python para identificar qué claves son comunes entre los dos.
Vamos a crear un contraobjeto, digamos, letter_count_2
, A partir de la another_word
cadena 'efervescencia'.
>>> 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 el operador simple & para encontrar la intersección entre letter_count
y letter_count_2
.
>>> letter_count & letter_count_2
Counter({'e': 2, 'r': 1, 'n': 1, 's': 1, 'c': 1})
Observe cómo obtiene las claves y el número de ocurrencias común a las dos palabras. Tanto 'renacimiento' como 'efervescencia' contienen dos ocurrencias de 'e' y una ocurrencia de 'r', 'n', 's' y 'c' en común.
Find the Most Frequent Items Using most_common
Otra operación común en el objeto de contador de Python es encontrar los elementos que ocurren con mayor frecuencia.
Para obtener los k artículos más comunes en el mostrador, puede usar el most_common()
método en el objeto contador. Aquí, llamamos most_common()
on letter_count
para encontrar las tres letras más frecuentes.
>>> 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 una gran cantidad de entradas y está interesado en trabajar con el más común llaves.
Conclusión
Aquí hay una revisión rápida de lo que hemos aprendido en el tutorial:
- La
Counter
La clase del módulo de colecciones incorporado de Python se puede usar para obtener un diccionario de valores de conteo de todos los elementos en cualquier iterable. Debe asegurarse de que todos los elementos en el iterable sean hashable. - Puede actualizar el contenido de un objeto de contador de Python con contenido de otro objeto de contador o cualquier otro iterable usando el
update()
método con la sintaxis:counter1.update(counter2)
. Tenga en cuenta que puede usar cualquier iterable en lugar decounter2
. - Si desea eliminar el contenido de uno de los iterables del contador actualizado, puede usar el
subtract()
método:counter1.subtract(counter2)
. - Para encontrar los elementos comunes entre dos objetos contadores, puede utilizar el & operador. Dados dos contadores
counter1
ycounter2
,counter1 & counter2
devuelve la intersección de estos dos objetos contadores. - Para obtener los elementos k más frecuentes en un contador, puede utilizar el
most_common()
método.counter.most_common(k)
da los elementos k más comunes y los respectivos recuentos.
A continuación, aprende cómo usar el dictado predeterminado, otra clase en el módulo de colecciones. Puede usar el dictado predeterminado en lugar de un diccionario de Python normal para manejar las claves que faltan.