是否可递归编辑可迭代对象子元素 实现可变长度keys嵌套赋值
嵌套对象递归赋值实现
核心递归函数
def recursive_set(data, keys, value): # 递归终止:只剩最后一个key,直接对当前层级赋值 if len(keys) == 1: data[keys[0]] = value return # 取当前层级的key,进入下一层嵌套对象继续执行递归 current_key = keys[0] recursive_set(data[current_key], keys[1:], value)
调用示例
# 测试用嵌套对象(支持dict、list混合嵌套) target_data = { "product": { "detail": { "stock": 120, "specs": ["red", "XL", "cotton"] } } } # 待覆写的(keys, value)元素集合 override_list = [ (["product", "detail", "stock"], 89), (["product", "detail", "specs", 1], "M") ] # 批量执行覆写 for keys, val in override_list: recursive_set(target_data, keys, val)
补充说明
- 以上实现默认传入的keys路径在嵌套对象中已存在,如果你需要支持路径不存在时自动创建中间层级,可以在递归逻辑前增加校验:判断当前key是否存在于当前层级对象中,不存在则根据下一个key的类型自动初始化dict或list即可。
- 如果需要兼容list索引越界、key类型不匹配等异常场景,可自行增加对应的捕获和处理逻辑。
内容的提问来源于stack exchange,提问作者lio
相关产品推荐
相关产品推荐

