2017-04-20 18 views
2

次のように私は辞書を作成しました:今更新値 - Pythonの

gP = dict.fromkeys(range(6), {'a': None, 'b': None, 'c': None, 'd': None}) 

、私がやって値を変更しようとすると:すべての値の、

gP[0]['a'] = 1 

を何らかの理由を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

あなただけ* * 1つの辞書を作成しています。 Pythonはあなたのためにそれをコピーしません。 – deceze

+0

詳しいことはありますか?私はあなたの答えからそれを修正する方法を理解していない、@deceze。 –

答えて

5

@decezeによれば、Pythonはコピーを作成しません。キーと値のペアのすべての値部分で同じ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

あなたはそれをあなたの答えに加えることができます:) –