Hoy vamos a ver todas las alternativas que nos ofrece la clase Counter del módelo Collections.
Counter es una subclase de diccionario integrada en Python que se utiliza para realizar cuentas o conteos sobre listas, palabras… Podríamos resumir la función Counter como un contador en Python.
Lo primero que tenemos que hacer siempre que queramos utilizar Counter es importar el módulo:
from collections import Counter
Y de esta forma tan sencilla, ya estamos en disposición de utilizar la función o clase Counter, por ejemplo, para contar los números dentro de una lista en Python:
l = [1,2,3,4,1,2,3,1,2,1]
Counter(l)
[Out] Counter({1: 4, 2: 3, 3: 2, 4: 1})
La clase Counter también nos sirve para contar las letras que hay dentro de una palabra en Python:
Counter("palabra")
[Out] Counter({'a': 3, 'b': 1, 'l': 1, 'p': 1, 'r': 1})
O incluso para contar las palabras que hay dentro de un conjunto de palabras:
coches= "mercedes ferrari bmw bmw ferrari bmw"
Counter(coches)
[Out] Counter({'r': 7, 'e': 5, ' ': 5, 'm': 4, 'b': 3, 'w': 3,
'f': 2, 'a': 2, 'i': 2, 'c': 1, 'd': 1, 's': 1})
Ups, pues no ha funcionado… me ha vuelto a contar letras.
¿Cómo podemos contar palabras en Python? Utilizando la función split(), que nos separa ese conjunto de palabras en una lista de palabras:
coches.split()
[Out] ['mercedes', 'ferrari', 'bmw', 'bmw', 'ferrari', 'bmw']
Y ahora sí, si volvemos a ejecutar la clase Counter de Python utilizando la función split(), ya sí realiza un conteo por palabras:
Counter(coches.split())
[Out] Counter({'bmw': 3, 'ferrari': 2, 'mercedes': 1})
Antes de terminar, vamos a ver una última función del módulo Collections, que nos permite filtrar los resultados:
# Almacenamos el Counter en 'c'
c = Counter(animales.split())
# Obtenemos el elemento más repetido
c.most_common(1)
[Out] [('bmw', 3)]
# Las dos palabras más repetidas
c.most_common(2)
[Out] [('bmw', 3),('ferrari': 2)]
# Ordenado por número de repeticiones
c.most_common()
[Out] [('bmw', 3),('ferrari': 2),('mercedes': 1)]
En este caso, la lista ordenada por repeticiones es la misma que hemos obtenido en el ejercicio anterior, pero ten en cuenta que esto sólo sucede porque la ordenación alfabética es la misma que por número de repeticiones.
Por tanto, debe quedarnos claro que en para una clase Counter normal, los registros siempre se mostrarán en orden alfabético, y tendremos que utilizar most_common() para obtener la ordenación por número de repeticiones de un conjunto en Python.
Máximo Rivas Valor dice
Me gusto mucho.
Se acepta publicidad que no impidan la lectura fluida.