2012-08-01 12 views
7

Tengo un diccionario de listas para el que deseo agregar un valor a una lista en particular ... Tengo el siguiente diccionario de listas.Cuenta de Python de elementos en un diccionario de listas

d = {'a': [4,'Adam', 2], 'b': [3,'John', 4], 'c': [4,'Adam', 3], 'd': [4,'Bill' 3], 'e': [4,'Bob'], 'f': [4, 'Joe'], 'g': [4, 'Bill']} 

quiero contar esencialmente el número de nombres y volver. Así que en este caso sería algo así como

Adam: 2 
Bill: 2 
John: 1 
Bob: 1 
Joe: 1 

Para facilitar las cosas, todos los nombres son el segundo elemento de la lista o

for i in d: 
    d[i][1] 

¿Alguna idea de cómo puedo hacer esto de manera eficiente? Actualmente estoy simplemente comprobando manualmente para cada nombre y contando y devolviendo eso =/

¡Gracias de antemano!

+0

¿Qué sucede si no está solo en la posición 1, entonces si tiene que accederse por i [x] donde x es una posición donde se encuentra el elemento? los valores [x] no parecen funcionar si recorre todos los valores. – user1530318

Respuesta

17

collections.Counter siempre es bueno para contar cosas.

>>> from collections import Counter 
>>> d = {'a': [4,'Adam', 2], 'b': [3,'John', 4], 'c': [4,'Adam', 3], 'd': [4,'Bill', 3], 'e': [4,'Bob'], 'f': [4, 'Joe'], 'g': [4, 'Bill']} 
>>> # create a list of only the values you want to count, 
>>> # and pass to Counter() 
>>> c = Counter([values[1] for values in d.itervalues()]) 
>>> c 
Counter({'Adam': 2, 'Bill': 2, 'Bob': 1, 'John': 1, 'Joe': 1}) 
+0

¡Se ve bien! ¿Alguna manera de eliminar la parte "Contador" y simplemente devolver esa lista con los números? – user1530318

+1

ya es un objeto similar a un diccionario, pero puede convertirlo en un diccionario puro con dict (c). – monkut

1
d = {'key': 'value'} 
temp_dict = {} 
for key, values in d.items(): 
    if values[1] in temp_dict: 
     temp_dict[values[1]] = temp_dict[values[1]] + 1 
    else: 
     temp_dict[values[1]] = 1 

Este código es más larga que la respuesta anterior, pero es más que otra manera de producir los mismos resultados. De todos modos, temp_dict almacenará los nombres como claves y valores como la cantidad de veces que aparece.

Cuestiones relacionadas