Python: Usar un diccionario para contar los elementos en una lista

Soy nuevo en Python y tengo una pregunta simple, digamos que tengo una lista de elementos:

['apple','red','apple','red','red','pear'] 

Cuál es la forma más sencilla de agregar los elementos de la lista a un diccionario y contar cuántas veces aparece el elemento en la lista.

Así que para la lista anterior me gustaría que la salida fuera:

 {'apple': 2, 'red': 3, 'pear': 1} 

En 2.7 y 3.1 hay un Counter 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.

 >>> L = ['apple','red','apple','red','red','pear'] >>> from collections import defaultdict >>> d = defaultdict(int) >>> for i in L: ... d[i] += 1 >>> d defaultdict(, {'pear': 1, 'apple': 2, 'red': 3}) 

Simplemente use la lista de propiedades de lista \

 i = ['apple','red','apple','red','red','pear'] d = {x:i.count(x) for x in i} print d 

salida:

 {'pear': 1, 'apple': 2, 'red': 3} 

Siempre pensé que para una tarea tan trivial, no me gustaría importar nada. Pero puedo estar equivocado, dependiendo de las colecciones. El encuentro 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 repasará 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.

Considera las colecciones. Contador (disponible desde Python 2.7 en adelante). https://docs.python.org/2/library/collections.html#collections.Counter

Qué tal esto:

 src = [ 'one', 'two', 'three', 'two', 'three', 'three' ] result_dict = dict( [ (i, src.count(i)) for i in set(src) ] ) 

Esto resulta en

{‘one’: 1, ‘three’: 3, ‘two’: 2}

 L = ['apple','red','apple','red','red','pear'] d = {} [d.__setitem__(item,1+d.get(item,0)) for item in L] print d 

Da {'pear': 1, 'apple': 2, 'red': 3}