2017-04-20 4 views
2

나는 사전을 만들어 a는 (관계없이 자신이 속한 키 위해) 아래 1로 변경 같이 내가 잘못 뭐하는 거지업데이트 값은 다음과 같이 파이썬

{0: {'a': 1, 'b': None, 'c': None, 'd': None}, 
1: {'a': 1, 'b': None, 'c': None, 'd': None}, 
2: {'a': 1, 'b': None, 'c': None, 'd': None}, 
3: {'a': 1, 'b': None, 'c': None, 'd': None}, 
4: {'a': 1, 'b': None, 'c': None, 'd': None}, 
5: {'a': 1, 'b': None, 'c': None, 'd': None}} 

? 적절한 임무는 무엇입니까?

+1

. 파이썬은 복사본을 만들지 않습니다. – deceze

+0

설명해 주시겠습니까? 나는 당신의 대답에서 그것을 고치는 법을 이해하지 못합니다, @deceze. –

답변

5

@deceze가 말했듯이, 파이썬은 복사본을 만들지 않습니다. 키 - 값 쌍의 모든 값 부분에서 동일한 dict을 참조합니다.

대안은 다음과 같습니다

gP = {x: {'a': None, 'b': None, 'c': None, 'd': None} for x in range(6)} 

업데이트 :이 답변의 많은 청소기 버전 @Chris_Rands가있다 : 당신은 * * 하나의 딕셔너리를 만드는

{x: dict.fromkeys('abcd') for x in range(6)} 
+2

범위가 좁은 x에 대해 {x : dict.fromkeys ('abcd')가 짧음}'; 또는 아마도 루프 밖에서'dict.fromkeys'를 취하는 것이 더 빠를 것입니다. –

+0

@Chris_Rands : 당신은 아마 그것을 분리 된 답으로 써야합니다. 나는 나의 것보다 더 좋아한다. :) – SuperSaiyan

+0

답변에 추가 할 수 있습니다. –

관련 문제