2017-01-13 1 views
0

사전을 반복하여 그에 따라 값을 업데이트하려고합니다. 웬일인지 나는 그것을 작동시킬 수 없다. 아래에 간단한 예제를 만들었습니다. 마지막으로 반복 된 'id'를 사전의 키 값 모두에 저장합니다.파이썬 사전 반복 및 업데이트

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