2012-02-05 3 views
19

목록이 있습니다. -myList - 각 요소는 사전입니다. 이 목록을 반복하고 싶지만 매번 사전마다 한 속성 - '연령'- 만 흥미 롭습니다. 또한 반복 횟수를 유지하는 데 관심이 있습니다. 뭔가 더 파이썬이사전리스트 반복문

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

을하지만 궁금 해서요 :

내가 할. 어떤 팁?

+1

의 목록은 당신이 그것을 수행 할 작업에 따라 다릅니다. 인쇄하고 싶다면 모두 괜찮습니다. 나이의 일부 기능 (최대라고 말하면 됨)을 사용하여 새 목록을 만들고 싶다면 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

라인의 끝에있는 세미콜론 (당신이 여러 개의 문을 넣어하려는 경우 사용할 수 있지만 파이썬에서 필요하지 않은 : 당신이 값을 저장하려면, 당신은 지능형리스트를 사용할 수 있습니다 같은 줄). 그래서 그들을 생략하는 것은 더 파이썬적일 것입니다.

그러나 실제 반복 전략은 따라하기 쉽고 실제로 수행중인 작업에 대해 명시 적입니다. 그것을 수행하는 방법은 다른입니다. 그러나 명백한 for-loop는 완벽하지 않습니다.

(하지 않을 것이다 니클라스 B.의 대답 정확하게 무슨 일을하고 있습니다 : 당신이 그런 짓을하려는 경우, 형식 문자열이 "{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]