2013-06-01 5 views
3

나는 왜이 두 문장이 동일하지 않은지 이해하지 못합니다.for for 루프의 목록에있는 파이썬 dict

for item in tree.findAll('item'): 
    names = [{ 
     'id': item.id.string, 
     'title': __decodefunction(item.entitle.string) 
    }] 

는 1 개 항목 을 가지고 있지만이 문

names = [{ 
    'id': item.id.string, 
    'title': __decodefunction(item.entitle.string) 
}for item in tree.findAll('item')] 

경우는 6 개 항목이 있습니다.

첫 번째 루프를 사용하고 싶지만 정확한 개수의 항목을 표시하지 않습니다. 올바른 출력은 6 개 항목입니다.

답변

9

그들은 매우 다른 일을합니다.

첫 번째 코드는 루프의 각 반복에서 새로운 값인 names을 정의하여 이전 값을 대체합니다. 으로 새 목록을 만들 때마다 사전이 하나씩 생성됩니다.

두 번째 단어는 tree.findAll()에 의해 반환 된 각 요소에 대해 하나 이상의 사전으로 구성된 목록을 작성하는 목록 이해입니다. 난 그냥 그

있어

names = [] 
for item in tree.findAll('item'): 
    names.append({ 
     'id': item.id.string, 
     'title': __decodefunction(item.entitle.string) 
    }) 
+0

변경은 선생님을 설명 주셔서 감사합니다! –

1

:

두 번째로 첫 번째 해당하려면, 당신은 그 루프에서에 추가, 먼저 빈 목록으로 names을 정의해야합니다 것 이

names = [] 
for item in tree.findAll('item'): 
    names.extend([{ 
     'id': item.id.string, 
     'title': __decodefunction(item.entitle.string) 
    }]) 
+3

'.extend ([]) 부분은 필요하지 않습니다. 한 번에 하나의 요소 만 추가하기 때문에'.append()'가 더 효과적이다. –

+1

다른 솔루션처럼 작동하는 두 가지 솔루션이 있지만 목록 해석이라는 다른 솔루션을 사용하는 것이 좋습니다. 그것은 나에게 더 편리하고 pythonic 해 보인다. – glglgl