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

如何提取值为列表的字典的所有可能唯一采样组合?

问题描述

给定字典:

d = {'a': ['A', 'B', 'C'], 'b': ['A', 'B', 'C'], 'c': ['D', 'E'], 'd': ['E', 'F', 'G']}

需要生成所有可能的唯一采样结果,每个结果是一个字典,其中每个键对应原字典中对应列表的一个元素。例如:

{'a': 'A', 'b': 'B', 'c': 'D', 'd': 'E'}

或

{'a': 'B', 'b': 'A', 'c': 'E', 'd': 'F'}
实现方法

可以用Python标准库中的itertools.product来解决,它能生成多个可迭代对象的笛卡尔积,正好匹配每个键的取值组合需求。

具体步骤:

  1. 提取原字典的键列表,保证后续组合的键顺序一致
  2. 按键的顺序提取对应的取值列表,组成可迭代对象集合
  3. 用itertools.product生成所有可能的取值组合
  4. 将每个组合与键列表配对,转换成目标字典格式

示例代码:

import itertools

original_dict = {'a': ['A', 'B', 'C'], 'b': ['A', 'B', 'C'], 'c': ['D', 'E'], 'd': ['E', 'F', 'G']}

# 获取键集合和对应取值列表
keys = list(original_dict.keys())
value_groups = [original_dict[key] for key in keys]

# 生成所有取值组合的笛卡尔积
all_combinations = itertools.product(*value_groups)

# 转换为字典列表
result_dicts = [dict(zip(keys, combo)) for combo in all_combinations]

# 打印前5个结果示例
for idx, item in enumerate(result_dicts[:5], 1):
    print(f"第{idx}个结果: {item}")

运行后输出的前5个结果示例:

第1个结果: {'a': 'A', 'b': 'A', 'c': 'D', 'd': 'E'}
第2个结果: {'a': 'A', 'b': 'A', 'c': 'D', 'd': 'F'}
第3个结果: {'a': 'A', 'b': 'A', 'c': 'D', 'd': 'G'}
第4个结果: {'a': 'A', 'b': 'A', 'c': 'E', 'd': 'E'}
第5个结果: {'a': 'A', 'b': 'A', 'c': 'E', 'd': 'F'}

最终会生成3×3×2×3=54个唯一的字典结果,完全覆盖所有可能的采样组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:45:38