You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:36:04