Подтвердить что ты не робот

Итерация по списку словарей

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

Я делаю:

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

Но было ли интересно, есть ли что-то более питоническое. Любые советы?

4b9b3361

Ответ 1

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

# 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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

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