python - 更新一个嵌套默认字典中的特定值,但不更新其他默认字典中的特定值
问题描述
我构建了一个三级 defaultdict,如下所示:
data_dict =
{
"5uz7_R": {
"section1": {
"=": 0,
"-": 0,
".": 0,
"+": 0,
"|": 0,
"gaps": 0
},
"section2": {
"=": 0,
"-": 0,
".": 0,
"+": 0,
"|": 0,
"gaps": 0
}
},
"4l6r_A": {
"section1": {
"=": 0,
"-": 0,
".": 0,
"+": 0,
"|": 0,
"gaps": 0
},
"section2": {
"=": 0,
"-": 0,
".": 0,
"+": 0,
"|": 0,
"gaps": 0
}
}
}
我的目标是使用 for 循环和 if 语句来更新其中一个整数值,具体取决于我在循环中的位置以及在迭代包含这些的字符串时找到的字符(=、-、+、...)人物。
我有几个单独的列表,其中包含我想要迭代的项目,并且相应的项目具有相应的索引(这是一个很长的故事......)。因此,我在每个循环中创建了一个字符串变量,该变量对应于我想要找到的连续字典键,以根据 if 语句更新嵌套最深的值。它看起来像这样:
for i in list1:
dict_lvl1 = a_function_of_i # a string, like "5uz7_R"
for j in list2:
dict_lvl2 = a_function_of_j # a string, like "section1"
for n in range(x):
if string[n] == '=':
data_dict[dict_lvl1][dict_lvl2]["="] += 1
elif string[n] == '-':
data_dict[dict_lvl1][dict_lvl2]["-"] += 1
...
问题是:如果遇到“=”(或任何 lvl3 字符),“=”的值会随处更新。
我觉得“main_dict[variable][variable]["character"] += 1" 本质上是有缺陷的,但我想确保没有办法让代码按原样工作(因为它之前有其他用途进入那个阶段)。
我希望这是可以理解的,如果不是,我真诚地道歉!
****编辑****
data_dict 是用 collections.defaultdict 通过从现有列表的项目中获取键值来构造的:
symbol_dict = defaultdict(int)
section_dict = defaultdict(dict)
data_dict = defaultdict(dict)
[symbol_dict[i] for i in symbol_list]
for j in section_list:
section_dict[j]=symbol_dict
for k in pdb_list:
data_dict[k] = section_dict
print(json.dumps(data_dict, indent=4))
print 语句生成 data_dict 如开头所示。
解决方案
对我来说,看起来您正在为所有 section_dicts 分配相同的 symbol_dict。尝试将其构建为:
from copy import deepcopy
for j in section_list:
section_dict[j]=deepcopy(symbol_dict)
for k in pdb_list:
data_dict[k] = deepcopy(section_dict)
推荐阅读
- python - 对大数据进行预测的最有效方法?
- ajax - 在 Ajax Laravel 中评论
- vb.net - VB.NET:添加\删除 datagridview 复选框行的行索引
- wordpress - 使用插件上传页眉和页脚后,我的鼠标没有出现在我的 wordpress 网站中的原因是什么?
- reactjs - React JS 和 framer-motion 中的无限动画列表问题
- sql-server - 添加凭据参数后无法在 SSMS 中运行 SQL Server 存储过程查询
- gitkraken - 如何在 Gitkraken 中像 git GUI 一样显示提交的所有文件数据
- powershell - 如何在powershell中拆分字符串变量并重命名文件夹
- r - Ifelse 用 dplyr 比较列的内容
- ruby - ruby 无法加载此类文件续集