迭代并更新python字典不起作用
尝试遍历字典并相应地更新其值。由于某种原因,我不能让它工作。我在下面创建了一个简单的示例。它将最后一次迭代的“id”保存到字典中的两个键值 示例代码是:迭代并更新python字典不起作用,python,dictionary,copy,Python,Dictionary,Copy,尝试遍历字典并相应地更新其值。由于某种原因,我不能让它工作。我在下面创建了一个简单的示例。它将最后一次迭代的“id”保存到字典中的两个键值 示例代码是: import copy ##### def setParams(params): for key,valuesDict in params.items(): print(key) params[key]['target']['id'] = key targetDict = {'id':"",'valu
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]是否为params[2][target]来轻松验证这一点。它应该返回True,这意味着它们是同一个对象 您可以使用以下方法使其工作:
first = copy.deepcopy(myParamsTemplate)
second = copy.deepcopy(myParamsTemplate)