2014-07-15 2 views
0

나중에 채우기 위해 빈 사전 목록을 초기화하려고합니다. 이것은 분명히 내가 각 사전에 할 각각의 일이 모두 완료됩니다 있도록 같은 사전 개체를 가리키는 두 개의 참조와 목록을 만듭니다다른 빈 dicts buch에 목록을 초기화하는 방법

x=2*[{}] 

:

는 곱셈 연산을 사용하여 시도

내가 곱셈 연산없이 지정하면
>>> 
>>> x=2*[{}] 
>>> x 
[{}, {}] 
>>> x[0] is x[1] 
True 
>>> x[0].update({'foo':[]}) 
>>> x 
[{'foo': []}, {'foo': []}] 
>>> 
>>> 
>>> y=2*[{}] 
>>> y 
[{}, {}] 
>>> y[0]['bar']=[] 
>>> y 
[{'bar': []}, {'bar': []}] 
>>> 
>>> 
>>> w=2*[{}] 
>>> w 
[{}, {}] 
>>> w[1][1]=1 
>>> w 
[{1: 1}, {1: 1}] 
>>> 

, 그때 행동이 내가 원하는 얻을 :

>>> z=[{},{}] 
>>> z 
[{}, {}] 
>>> z[1][1]=1 
>>> z 
[{}, {1: 1}] 
>>> 

하지만 실제 코드에서는 런타임 전에 얼마나 큰 목록이 될지 모릅니다!

그래서 두 가지 질문이 있습니다. 이 예상 되었습니까, 아니면 언어의 버그입니까? 코드를 쓸 때 크기를 모른 채로 변수를 z과 같이 초기화하려면 어떻게해야합니까?

상황 :

파이썬 3.3.4. xlrd를 사용하여 MS Excel 스프레드 시트를 구문 분석합니다. 스프레드 시트에는 데이터와 함께 다음 헤더 행 사이에 데이터의 의미가 변경되는 여러 헤더 행이 있습니다. 정확한 (가장 가까운) 헤더를 키로 사용하여 데이터로 각 줄을 채운 선 위로 반복하고 싶습니다.

가능한 해결 방법은 목록 길이를이 스프레드 시트의 줄 수로 하드 코딩하는 것이지만 번호가 변경 될 때마다 코드를 변경해야한다는 유지 관리 문제가 발생합니다.

도움 주셔서 감사합니다.

답변

3

루프를 사용해야합니다.

x = [{} for _ in range(z)] 
관련 문제