使用Python递归函数修改嵌套JSON中weight属性值(乘10)
递归处理嵌套字典,批量修改"weight"值
没问题!递归确实是处理这种嵌套层级结构的绝佳方案,正好能锻炼你对递归逻辑的理解。我来帮你实现这个需求,顺便拆解一下思路。
核心思路
递归函数的关键在于拆解问题+终止条件:
- 终止条件:当处理的元素既不是字典也不是列表时,直接返回原元素(比如字符串、数值这些)
- 递归逻辑:
- 如果是字典:先检查是否存在"weight"键,存在就把值乘以10;然后遍历字典的每个值,递归处理每个值
- 如果是列表:遍历列表中的每一项,递归处理每一项
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
相关产品推荐
相关产品推荐

