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

使用dpath库替换嵌套字典中含min/max键的子字典

使用dpath替换嵌套字典中的min/max子字典为随机数

问题描述

我有如下格式的嵌套输入字典:

{  
  "a": {
    "b": {
      "Red": {"min": 0, "max": 1},
      "Green": {"min": 1, "max": 10}
    },
    "c": {
      "Red": {"min": 2, "max": 100}
    }
  }
}

需要使用dpath库查找所有形如{'min': min_value, 'max': max_value}的子字典,并将这类子字典替换为min_value到max_value之间的随机数。

预期输出

{  
  "a": {
    "b": {
      "Red": 0到1之间的随机数,
      "Green": 1到10之间的随机数
    },
    "c": {
      "Red": 2到100之间的随机数
    }
  }
}

要求代码具备通用性,含min/max键的子字典可能位于字典的任意层级。此前尝试使用dpath的regex选项但未成功。

解决方案

可以通过dpath的walk方法递归遍历整个嵌套字典,匹配所有符合条件的子字典并完成替换。具体实现如下:

实现代码

import dpath.util
import random

def replace_min_max(node):
    # 判断当前节点是否为包含min和max键的字典
    if isinstance(node, dict) and "min" in node and "max" in node:
        min_val = node["min"]
        max_val = node["max"]
        # 生成区间随机数:浮点数用uniform,整数用randint
        return random.uniform(min_val, max_val)
    # 不符合条件的节点原样返回
    return node

# 原始输入字典
input_dict = {  
  "a": {
    "b": {
      "Red": {"min": 0, "max": 1},
      "Green": {"min": 1, "max": 10}
    },
    "c": {
      "Red": {"min": 2, "max": 100}
    }
  }
}

# 遍历字典并执行替换
dpath.util.walk(input_dict, function=replace_min_max, flags=dpath.util.WALK_LEAFS)

print(input_dict)

代码说明

  • dpath.util.walk:递归遍历字典的所有节点,flags=dpath.util.WALK_LEAFS指定只处理叶子节点(即没有子节点的字典,这里就是目标min/max子字典)
  • replace_min_max函数:负责校验节点是否符合要求,若符合则生成对应区间的随机数返回,否则原样返回节点
  • 随机数类型:如果需要整数随机数,将random.uniform替换为random.randint即可,适配不同数值类型需求

这种方法不受嵌套层级限制,能处理任意位置的目标子字典。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:17:11