如何在不修改循环结构的情况下层级存储迭代的stability_u DataFrame?
无需修改现有多层for循环结构的存储方案
当然有,以下两种方案都不需要改动你现有for循环的嵌套格式和遍历逻辑,只需要在循环内部添加几行代码就能实现需求:
方案1:用递归嵌套的defaultdict自动创建层级
借助collections.defaultdict实现递归嵌套,不需要提前手动初始化每一层字典,直接按路径赋值即可:
from collections import defaultdict # 定义递归生成多层嵌套字典的函数 def nested_defaultdict(): return defaultdict(nested_defaultdict) # 初始化顶层字典 stability_strain_formula = nested_defaultdict() # 你的现有多层for循环(完全不需要修改循环结构) for sheet_name in sheet_names: for method in methods: for Umethod in Umethods: for press in presses: for pmudmethod in pmudmethods_list: for Svmethod in Svmethods_list: # 这里是你生成动态更新的stability_u DataFrame的代码 stability_u = ... # 你的DataFrame生成逻辑 # 直接按多层路径赋值,不存在的层级会自动创建 stability_strain_formula[sheet_name][method][Umethod][press][pmudmethod][Svmethod] = stability_u.copy()
方案2:用dict的setdefault方法逐层初始化层级
如果不想导入额外模块,可以用原生字典的setdefault方法,在循环内逐层确保每个层级的字典存在,再完成赋值:
# 初始化顶层空字典 stability_strain_formula = {} # 你的现有多层for循环(结构完全不变) for sheet_name in sheet_names: for method in methods: for Umethod in Umethods: for press in presses: for pmudmethod in pmudmethods_list: for Svmethod in Svmethods_list: stability_u = ... # 你的DataFrame生成逻辑 # 逐层检查并创建不存在的字典层级 stability_strain_formula.setdefault(sheet_name, {}) stability_strain_formula[sheet_name].setdefault(method, {}) stability_strain_formula[sheet_name][method].setdefault(Umethod, {}) stability_strain_formula[sheet_name][method][Umethod].setdefault(press, {}) stability_strain_formula[sheet_name][method][Umethod][press].setdefault(pmudmethod, {}) # 完成赋值 stability_strain_formula[sheet_name][method][Umethod][press][pmudmethod][Svmethod] = stability_u.copy()
注意事项
- 一定要用
stability_u.copy()而不是直接赋值,因为DataFrame是引用类型,直接赋值会导致后续迭代中更新的stability_u覆盖之前存储的所有值。 - 两种方案都完全保留了你原有的for循环嵌套结构,只需要在循环内部插入对应的赋值/初始化代码即可。
内容的提问来源于stack exchange,提问作者alirezausefi
相关产品推荐
相关产品推荐

