在Python中更新嵌套字典中的计数器

在Python中更新嵌套字典中的计数器,python,dictionary,Python,Dictionary,我使用的是一个初始值为0的空结果字典,在浏览源数据时,我希望在出现该字典时对其进行更新。字典如下所示: { "Group1": { "1": { "fr": { "answered": 0, "unanswered": 0 }, "nl": { "answered"

我使用的是一个初始值为0的空结果字典,在浏览源数据时,我希望在出现该字典时对其进行更新。字典如下所示:

{
  "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']=原件

我无法再现“整个字典中更新的所有计数器具有相同的值”部分。可能是您通过复制引用创建了字典。我猜也是引用。当我在我的机器上运行你的代码时,我得到了你想要的结果。谢谢!事实上,最后一本字典是一本参考书!