尝试迭代字典并相应地更新其值。出于某种原因,我无法让它发挥作用。我在下面创建了一个简单示例。它将最后一次迭代的'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'。
答案 0 :(得分:1)
因为你只做一个浅拷贝(它不会复制最里面的字典)。您可以通过打印params["1"]["target"] is params["2"]["target"]
轻松验证这一点,它应该返回True
(这意味着它们是同一个对象)。
您可以使用copy.deepcopy
:
first = copy.deepcopy(myParamsTemplate)
second = copy.deepcopy(myParamsTemplate)