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

如何保留字典键的同时生成各键对应列表值的笛卡尔积?

生成字典值列表的笛卡尔积并保留原键

可以用Python标准库中的itertools.product来实现这个需求,不管字典有多少个键都能适用,具体步骤如下:

实现代码

import itertools

dicts = {
    "d1": ["d1_value", "d1_value2"],
    "d2": ["d2_value", "d2_value2"]
}

# 提取字典的键和对应的值列表
keys = list(dicts.keys())
value_lists = list(dicts.values())

# 生成所有值的笛卡尔积
product_results = itertools.product(*value_lists)

# 将每个笛卡尔积元组转换为带原键的字典
result = [dict(zip(keys, item)) for item in product_results]

运行结果

[
    {"d1": "d1_value", "d2": "d2_value"},
    {"d1": "d1_value", "d2": "d2_value2"},
    {"d1": "d1_value2", "d2": "d2_value"},
    {"d1": "d1_value2", "d2": "d2_value2"}
]

原理说明

  1. 先提取字典的键和值列表,确保键与对应值列表的顺序完全匹配;
  2. itertools.product(*value_lists)会将所有值列表的元素进行笛卡尔积组合,返回一个包含所有组合元组的迭代器;
  3. 用zip(keys, item)把每个元组的元素和对应的键一一配对,再通过dict()转换成字典,最后用列表推导式生成最终结果列表。

多键场景验证

如果字典包含更多键,比如3个键的情况:

dicts = {
    "a": [1, 2],
    "b": ["x", "y"],
    "c": [True, False]
}

运行代码后会生成8个字典,每个都是三个键值对的完整组合,完全满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:50:30