2012-02-05 21 views
19

Tengo una lista -myList- donde cada elemento es un diccionario. Deseo iterar sobre esta lista, pero solo me interesa un atributo, "edad", en cada diccionario cada vez. También estoy interesado en contar el número de iteraciones.Iteración sobre la lista de diccionarios

yo:

for i, entry in enumerate(myList): 
    print i; 
    print entry['age']; 

Pero se preguntaba ¿hay algo más Pythonic. ¿Algun consejo?

+1

Depende de lo que quiere hacer con ella. Si todo lo que quiere hacer es imprimirlo, esto está bien. Si quisiera hacer una nueva lista con alguna función de la edad (por ejemplo, el máximo), podría usar un listcomp o genexp. Pero si quiere hacer muchas ramificaciones en la entrada ['edad'], quédese con el ciclo for. [Y puedes saltarte el punto y coma ..] – DSM

Respuesta

22

Se puede usar un generador de solo agarrar edades.

# Get a dictionary 
myList = [{'age':x} for x in range(1,10)] 

# Enumerate ages 
for i, age in enumerate(d['age'] for d in myList): 
    print i,age 

Y, sí, no use punto y coma.

4

Para imprimir, probablemente lo que está haciendo es casi lo correcto. Pero si desea almacenar los valores, se puede utilizar una lista por comprensión:

>>> d_list = [dict((('age', x), ('foo', 1))) for x in range(10)] 
>>> d_list 
[{'age': 0, 'foo': 1}, {'age': 1, 'foo': 1}, {'age': 2, 'foo': 1}, {'age': 3, 'foo': 1}, {'age': 4, 'foo': 1}, {'age': 5, 'foo': 1}, {'age': 6, 'foo': 1}, {'age': 7, 'foo': 1}, {'age': 8, 'foo': 1}, {'age': 9, 'foo': 1}] 
>>> ages = [d['age'] for d in d_list] 
>>> ages 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> len(ages) 
10 
2

Los puntos y comas al final de las líneas no son necesarios en Python (aunque se puede usar si usted quiere poner múltiples declaraciones sobre la misma línea). Entonces sería más pitónico omitirlos.

Pero la estrategia de iteración real es fácil de seguir y bastante explícita sobre lo que está haciendo. Hay otras formas para hacerlo. Pero un for-loop explícito es perfectamente pitónico.

(respuesta de Niklas B. no va a hacer precisamente lo que estás haciendo: si quieres hacer algo así, la cadena de formato debe ser "{0}\n{1}".)

14

manera muy sencilla, lista de diccionario iterate

>>> my_list 
[{'age': 0, 'name': 'A'}, {'age': 1, 'name': 'B'}, {'age': 2, 'name': 'C'}, {'age': 3, 'name': 'D'}, {'age': 4, 'name': 'E'}, {'age': 5, 'name': 'F'}] 

>>> ages = [li['age'] for li in my_list] 

>>> ages 
[0, 1, 2, 3, 4, 5] 
Cuestiones relacionadas