Python如何实现支持不同层级嵌套字典值修改的类方法
问题梳理
你现有代码存在几处基础错误和逻辑限制:
- 属性名不一致:
__init__中定义的字典属性是self.para_dict,但修改方法中调用的是self.parameter_dict,运行会直接报错 - 初始化字典语法错误:键
analysis_years后是逗号无对应值,不符合字典键值对格式 - 嵌套参数调用语法错误:
"overhead_line"['lifespan']是非法写法,字符串不能用字符串作为索引取值 - 原修改方法仅支持读取最外层字典的键,无嵌套路径遍历逻辑
解决方案
核心逻辑是通过参数层级路径列表定位任意深度的嵌套参数,逐层遍历字典找到目标节点后修改值,修正后的完整代码如下:
class model_inputs: def __init__(self): # 修正原字典语法错误,给analysis_years设置初始值 self.para_dict = { "analysis_years": 5, "average_age": 20, "age_shape": 10, "overhead_line": { 'lifespan':10, 'replcost':10000, 'growth_rate':0.1 } } def modify_parameter(self, param_path, percentage_change): # param_path为参数层级列表,例如["average_age"]对应外层参数,["overhead_line", "lifespan"]对应嵌套参数 current_node = self.para_dict # 遍历到目标参数的父节点 for key in param_path[:-1]: current_node = current_node[key] # 取目标参数的键名 target_key = param_path[-1] # 计算新值并修改,若传入的percentage_change是百分比数值(如100代表100%),可改为(1 + percentage_change/100)*original_param original_param = current_node[target_key] new_param = current_node[target_key] = (1 + percentage_change) * original_param return new_param
使用示例
- 修改外层参数:
data = model_inputs() # 把外层average_age提升100% new_val = data.modify_parameter(["average_age"], 1) print(new_val) # 输出40
- 修改嵌套层参数:
# 把overhead_line下的lifespan提升100% new_val = data.modify_parameter(["overhead_line", "lifespan"], 1) print(new_val) # 输出20 print(data.para_dict["overhead_line"]["lifespan"]) # 验证修改生效,输出20
如果你更习惯直接传入多参数的写法,也可以把方法调整为可变参数形式:
def modify_parameter(self, *param_path, percentage_change): current_node = self.para_dict for key in param_path[:-1]: current_node = current_node[key] target_key = param_path[-1] original_param = current_node[target_key] new_param = current_node[target_key] = (1 + percentage_change) * original_param return new_param
调用时可以直接写:modify_parameter("overhead_line", "lifespan", percentage_change=1)
内容的提问来源于stack exchange,提问作者user17017431
相关产品推荐
相关产品推荐

