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

使用Python递归函数修改嵌套JSON中weight属性值(乘10)

递归处理嵌套字典,批量修改"weight"值

没问题!递归确实是处理这种嵌套层级结构的绝佳方案,正好能锻炼你对递归逻辑的理解。我来帮你实现这个需求,顺便拆解一下思路。

核心思路

递归函数的关键在于拆解问题+终止条件:

  • 终止条件:当处理的元素既不是字典也不是列表时,直接返回原元素(比如字符串、数值这些)
  • 递归逻辑:
    1. 如果是字典:先检查是否存在"weight"键,存在就把值乘以10;然后遍历字典的每个值,递归处理每个值
    2. 如果是列表:遍历列表中的每一项,递归处理每一项

Python代码实现

def multiply_weight_by_10(data):
    # 处理字典类型
    if isinstance(data, dict):
        # 遍历字典的每个键值对
        for key, value in data.items():
            if key == "weight":
                # 找到weight键,值乘10
                data[key] = value * 10
            else:
                # 非weight键,递归处理对应的值
                data[key] = multiply_weight_by_10(value)
        return data
    # 处理列表类型
    elif isinstance(data, list):
        # 遍历列表每个元素,递归处理
        return [multiply_weight_by_10(item) for item in data]
    # 其他类型(字符串、数值等)直接返回
    else:
        return data

测试示例

我们用你给出的示例输入来测试:

# 示例输入
input_data = {
    "name": "Entire genepool",
    "children": [
        {
            "name": "child1",
            "weight": 80,
            "children": [
                {"name": "child2", "weight": 50}
            ]
        }
    ]
}

# 调用函数
result = multiply_weight_by_10(input_data)
print(result)

运行后输出会是:

{
    "name": "Entire genepool",
    "children": [
        {
            "name": "child1",
            "weight": 800,
            "children": [
                {"name": "child2", "weight": 500}
            ]
        }
    ]
}

补充说明

  • 这个函数默认会原地修改原字典的weight值,如果想完全保留原数据,可以在处理字典时先创建一个新字典(比如new_dict = data.copy(),然后操作new_dict)
  • 如果担心遇到"weight"的值不是数值类型的情况,可以在代码里加个类型判断:if key == "weight" and isinstance(value, (int, float)),避免出现运算报错

内容的提问来源于stack exchange,提问作者user3089520

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:10:29