2017-01-13 55 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