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

如何用itertools.product扩展含元组的字典生成笛卡尔积字典列表

解决字典中元组值的笛卡尔积展开问题

核心思路是拆分固定键值对与可变键值对(元组类型的 value),利用itertools.product对可变项的元素做笛卡尔积组合,最后将每个组合结果与固定项合并成完整字典。

具体实现代码

import itertools

params = {
    'a': 'static',
    'b': (1, 2),
    'c': ('X', 'Y')
}

# 拆分固定项和需做笛卡尔积的键-元素列表
fixed = {}
variable_groups = []
for key, value in params.items():
    if isinstance(value, tuple):
        # 为每个含元组的键生成(键, 元素)的列表,供后续组合
        variable_groups.append([(key, elem) for elem in value])
    else:
        fixed[key] = value

# 生成笛卡尔积并合并所有键值对
result = []
for item_group in itertools.product(*variable_groups):
    # 复制固定项,避免修改原字典
    combined_dict = fixed.copy()
    # 将当前笛卡尔积组转成字典并合并
    combined_dict.update(dict(item_group))
    result.append(combined_dict)

print(result)

代码说明

  1. 数据拆分:遍历原字典,非元组值的键值对存入fixed字典;元组值的键则生成包含(键, 元素)的列表,所有这类列表存入variable_groups。比如示例中variable_groups最终为[[('b',1), ('b',2)], [('c','X'), ('c','Y')]]。
  2. 笛卡尔积运算:itertools.product(*variable_groups)会对variable_groups中的每个列表做笛卡尔积,每次迭代得到的item_group是一组(键,元素)元组,比如(('b',1), ('c','X'))。
  3. 字典合并:每次复制fixed字典,再将当前笛卡尔积组转成的字典更新进去,得到完整的结果字典后加入最终列表。

边界情况适配

  • 原字典无元组值:variable_groups为空,itertools.product会返回含空元组的迭代器,合并后得到原字典,最终结果为[fixed]。
  • 原字典全是元组值:fixed为空,直接将每个笛卡尔积组转成字典即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:30:58