Usar un diccionario para contar los elementos de una lista
Supongamos que tengo una lista de elementos, como:
['apple', 'red', 'apple', 'red', 'red', 'pear']
Quiero un diccionario que cuente cuántas veces aparece cada elemento en la lista. Entonces, para la lista anterior, el resultado debería ser:
{'apple': 2, 'red': 3, 'pear': 1}
¿Cómo puedo hacer esto simplemente en Python?
Si solo está interesado en contar instancias de un solo elemento en una lista, consulte ¿Cómo cuento las apariciones de un elemento de lista? .
En 2.7 y 3.1, existe la Counter
( dict
subclase) especial para este propósito.
>>> from collections import Counter
>>> Counter(['apple','red','apple','red','red','pear'])
Counter({'red': 3, 'apple': 2, 'pear': 1})
Me gusta:
counts = dict()
for i in items:
counts[i] = counts.get(i, 0) + 1
.get le permite especificar un valor predeterminado si la clave no existe.
Simplemente use la lista de recuento de propiedades\
i = ['apple','red','apple','red','red','pear']
d = {x:i.count(x) for x in i}
print d
producción :
{'pear': 1, 'apple': 2, 'red': 3}
>>> L = ['apple','red','apple','red','red','pear']
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> for i in L:
... d[i] += 1
>>> d
defaultdict(<type 'int'>, {'pear': 1, 'apple': 2, 'red': 3})
Siempre pensé que para una tarea tan trivial, no querría importar nada. Pero puedo estar equivocado, dependiendo de las colecciones. El contador es más rápido o no.
items = "Whats the simpliest way to add the list items to a dictionary "
stats = {}
for i in items:
if i in stats:
stats[i] += 1
else:
stats[i] = 1
# bonus
for i in sorted(stats, key=stats.get):
print("%d×'%s'" % (stats[i], i))
Creo que esto puede ser preferible a usar count(), porque solo revisará el iterable una vez, mientras que count puede buscar todo en cada iteración. Utilicé este método para analizar muchos megabytes de datos estadísticos y siempre fue razonablemente rápido.