簡體   English   中英

迭代和更新python字典不起作用

[英]Iterate and update python dictionary not working

嘗試遍歷字典並相應地更新其值。 由於某種原因,我無法使其正常工作。 我在下面創建了一個簡單的示例。 它將最后一個迭代的“ 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”。

因為您只在進行淺表復制(不會復制最里面的字典)。 您可以通過打印params["1"]["target"] is params["2"]["target"]來輕松驗證這一點,它應該返回True (這意味着它們是同一對象)。

您可以使用copy.deepcopy使其工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM