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

如何从嵌套字典生成所有配置组合?

递归生成嵌套字典的所有枚举配置

问题背景

给定一个包含嵌套结构的字典,其中部分值为列表类型,需要枚举所有列表元素的组合,生成所有可能的完整配置字典列表。示例输入如下:

input_dict = {
  "a": [1,2,3],
  "b":{
    "b1":[True, False],
    "b2":[0],
  }
}

期望输出所有组合后的配置列表:

config = [
  {
    "a": 1,
    "b":{
      "b1":True,
      "b2":0,
    }
  },
  {
    "a": 1,
    "b":{
      "b1":False,
      "b2":0,
    }
  },
  {
    "a": 2,
    "b":{
      "b1":True,
      "b2":0,
    }
  },
  {
    "a": 2,
    "b":{
      "b1":False,
      "b2":0,
    }
  },
  {
    "a": 3,
    "b":{
      "b1":True,
      "b2":0,
    }
  },
  {
    "a": 3,
    "b":{
      "b1":False,
      "b2":0,
    }
  }
]

递归实现方案

递归的核心思路是逐层拆解嵌套结构:

  • 遇到普通值(非列表、非字典):直接包装为单元素列表,作为该字段的可选值
  • 遇到列表:列表中的每个元素都是该字段的可选值
  • 遇到嵌套字典:递归处理该子字典,得到子字典的所有可能配置,作为当前字段的可选值

最后通过笛卡尔积,将所有字段的可选值组合起来,生成完整的配置字典。

以下是Python代码实现:

import itertools

def generate_configs(data):
    # 存储每个键对应的可选值列表
    key_options = []
    
    for key, value in data.items():
        if isinstance(value, list):
            # 列表类型:每个元素都是一个选项
            options = [(key, v) for v in value]
        elif isinstance(value, dict):
            # 嵌套字典:递归获取子配置,每个子配置作为一个选项
            sub_configs = generate_configs(value)
            options = [(key, sub_cfg) for sub_cfg in sub_configs]
        else:
            # 普通值:只有一个选项
            options = [(key, value)]
        
        key_options.append(options)
    
    # 生成所有键选项的笛卡尔积,组合成完整配置
    configs = []
    for combination in itertools.product(*key_options):
        config = {}
        for key, val in combination:
            config[key] = val
        configs.append(config)
    
    return configs

# 测试示例
input_dict = {
  "a": [1,2,3],
  "b":{
    "b1":[True, False],
    "b2":[0],
  }
}

config = generate_configs(input_dict)
# 打印结果
for cfg in config:
    print(cfg)

代码说明

  1. 递归处理嵌套字典:当遇到子字典时,调用generate_configs递归生成该子字典的所有可能配置,每个子配置作为当前键的一个可选值。
  2. 笛卡尔积组合:使用itertools.product将所有键的可选值进行全组合,确保覆盖所有可能的枚举情况。
  3. 兼容多种类型:自动处理普通值、列表、嵌套字典三种情况,适配不同的输入结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:21:00