2017-01-13 6 views
0

辞書を反復処理し、それに応じて値を更新しようとしています。何らかの理由で私はそれを働かせることができません。私は以下の簡単な例を作成しました。最後に反復された 'id'を辞書の両方のキー値に保存します。Python辞書を反復して更新しないでください

サンプルコードは、次のとおり

import copy 

##### 
def setParams(params): 
    for key,valuesDict in params.items(): 
     print(key) 
     params[key]['target']['id'] = key 

targetDict = {'id':"",'value':0} 
myParamsTemplate = {'target':targetDict} 
first = copy.copy(myParamsTemplate) 
second = copy.copy(myParamsTemplate) 


params = {"1":first,"2":second} 

print("before:\n",params) 

setParams(params) 

print("after:\n",params) 

プリントアウト:

before: 
{'1': {'target': {'id': '', 'value': 0}}, '2': {'target': {'id': '', 'value': 0}}} 
1 
2 
after: 
{'1': {'target': {'id': '2', 'value': 0}}, '2': {'target': {'id': '2', 'value': 0}}} 

'ID' はそれぞれ1および2であるべきで、まだ結果は常に '2' の両方のために。

答えて

1

あなたは浅いコピーをしているだけなので(内側の辞書はコピーされません)。 params["1"]["target"] is params["2"]["target"]を印刷すると簡単に確認できます。True(同じオブジェクトであることを意味します)を返す必要があります。あなたはそれがcopy.deepcopyを使用して動作させることができ

first = copy.deepcopy(myParamsTemplate) 
second = copy.deepcopy(myParamsTemplate) 
+0

どういたしましてuser1179317 @。 – MSeifert

関連する問題