2012-02-05 4 views
19

У меня есть список -myList - где каждый элемент является словарем. Я хочу перебирать этот список, но мне интересен только один атрибут - «возраст» - каждый словарь каждый раз. Я также заинтересован в том, чтобы подсчитывать количество итераций.Итерация над списком словарей

я:

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

Но было интересно, есть нечто большее, вещий. Какие-нибудь советы?

+1

Зависит от того, что вы хотите с ним делать. Если все, что вы хотите сделать, это распечатать, это нормально. Если вы хотите создать новый список с определенной функцией возраста (скажем, max), вы можете использовать listcomp или genexp. Но если вы хотите сделать много разветвлений при входе ['age'], придерживайтесь цикла for. [И вы можете пропустить точки с запятой ..] – DSM

ответ

22

Вы можете использовать генератор для только хватит возраста.

# 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 

И, да, не используйте точки с запятой.

4

Для печати, вероятно, что вы делаете, это почти правильно. Но если вы хотите сохранить значения, вы могли бы использовать список понимание:

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

с запятой в конце строки не нужно в Python (хотя вы можете использовать их, если вы хотите поместить несколько операторов на одна и та же линия). Таким образом, было бы более пуфово, чтобы опустить их.

Но фактическая стратегия итерации легко отслеживается и довольно четко о том, что вы делаете. Есть другие способы сделать это. Но явный for-loop отлично питоничен.

(ответ Никлас Б. не будет делать точно, что вы делаете: если вы хотите сделать что-то подобное, строка формата должна быть "{0}\n{1}".)

14

Очень простой способ, список словаря итерация

>>> 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]