在Python中更新嵌套字典中的计数器
我使用的是一个初始值为0的空结果字典,在浏览源数据时,我希望在出现该字典时对其进行更新。字典如下所示:在Python中更新嵌套字典中的计数器,python,dictionary,Python,Dictionary,我使用的是一个初始值为0的空结果字典,在浏览源数据时,我希望在出现该字典时对其进行更新。字典如下所示: { "Group1": { "1": { "fr": { "answered": 0, "unanswered": 0 }, "nl": { "answered"
{
"Group1": {
"1": {
"fr": {
"answered": 0,
"unanswered": 0
},
"nl": {
"answered": 0,
"unanswered": 0
},
"not_specified": {
"answered": 0,
"unanswered": 0
}
},
"2": {
"fr": {
"answered": 0,
"unanswered": 0
},
"nl": {
"answered": 0,
"unanswered": 0
},
"not_specified": {
"answered": 0,
"unanswered": 0
}
},
"3": {
"fr": {
"answered": 0,
"unanswered": 0
},
"nl": {
"answered": 0,
"unanswered": 0
},
"not_specified": {
"answered": 0,
"unanswered": 0
}
},
"4": {
"fr": {
"answered": 0,
"unanswered": 0
},
"nl": {
"answered": 0,
"unanswered": 0
},
"not_specified": {
"answered": 0,
"unanswered": 0
}
},
"5": {
"fr": {
"answered": 0,
"unanswered": 0
},
"nl": {
"answered": 0,
"unanswered": 0
},
"not_specified": {
"answered": 0,
"unanswered": 0
}
},
"6": {
"fr": {
"answered": 0,
"unanswered": 0
},
"nl": {
"answered": 0,
"unanswered": 0
},
"not_specified": {
"answered": 0,
"unanswered": 0
}
},
"not_specified": {
"fr": {
"answered": 0,
"unanswered": 0
},
"nl": {
"answered": 0,
"unanswered": 0
},
"not_specified": {
"answered": 0,
"unanswered": 0
}
}
},
"Group2": {
"1": {
"fr": {
"answered": 0,
"unanswered": 0
},
"nl": {
"answered": 0,
"unanswered": 0
},
"not_specified": {
"answered": 0,
"unanswered": 0
}
},
"2": {
"fr": {
"answered": 0,
"unanswered": 0
},
"nl": {
"answered": 0,
"unanswered": 0
},
"not_specified": {
"answered": 0,
"unanswered": 0
}
},
"3": {
"fr": {
"answered": 0,
"unanswered": 0
},
"nl": {
"answered": 0,
"unanswered": 0
},
"not_specified": {
"answered": 0,
"unanswered": 0
}
},
"4": {
"fr": {
"answered": 0,
"unanswered": 0
},
"nl": {
"answered": 0,
"unanswered": 0
},
"not_specified": {
"answered": 0,
"unanswered": 0
}
},
"5": {
"fr": {
"answered": 0,
"unanswered": 0
},
"nl": {
"answered": 0,
"unanswered": 0
},
"not_specified": {
"answered": 0,
"unanswered": 0
}
},
"6": {
"fr": {
"answered": 0,
"unanswered": 0
},
"nl": {
"answered": 0,
"unanswered": 0
},
"not_specified": {
"answered": 0,
"unanswered": 0
}
},
"not_specified": {
"fr": {
"answered": 0,
"unanswered": 0
},
"nl": {
"answered": 0,
"unanswered": 0
},
"not_specified": {
"answered": 0,
"unanswered": 0
}
}
}
}dic
当我尝试只更新给定计数器时,例如:
myDic['Group1']['1']['nl']['answered']=myDic['Group1']['1']['nl']['answered']+10
myDic['Group2']['1']['nl']['answered']=myDic['Group2']['1']['nl']['unanswered']+100
我用相同的值更新了整个字典中的所有计数器。原因是什么?您当前的代码是有效的,但看起来您的
{“已回答”:0,“未回答”:0}
dict是对同一对象的引用,因此当您更改其中的值时,它会到处更改
检查id(myDic['Group1']['1']['nl'])==id(myDic['Group1']['1']['fr'])
?
如果是这样,在创建这些DICT时,您需要使用from copy import deepcopy
此代码有味道,但概述清楚:
从复制导入deepcopy
原件=深度复制(myDic['Group1']['1']['nl']]
原件[“已答复”]+=10
myDic['Group1']['1']['nl']=原件
我无法再现“整个字典中更新的所有计数器具有相同的值”部分。可能是您通过复制引用创建了字典。我猜也是引用。当我在我的机器上运行你的代码时,我得到了你想要的结果。谢谢!事实上,最后一本字典是一本参考书!