Usar un diccionario para contar los elementos de una lista

Resuelto Sophie asked hace 14 años • 0 respuestas

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? .

Sophie avatar Aug 17 '10 02:08 Sophie
Aceptado

En 2.7 y 3.1, existe la Counter( dictsubclase) especial para este propósito.

>>> from collections import Counter
>>> Counter(['apple','red','apple','red','red','pear'])
Counter({'red': 3, 'apple': 2, 'pear': 1})
Odomontois avatar Aug 16 '2010 20:08 Odomontois

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.

mmmdreg avatar Jul 05 '2011 12:07 mmmdreg

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}
Ashish Kumar Verma avatar Mar 29 '2016 12:03 Ashish Kumar Verma
>>> 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})
mechanical_meat avatar Aug 16 '2010 19:08 mechanical_meat

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.

Stefano Palazzo avatar Aug 17 '2010 12:08 Stefano Palazzo