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

Python:生成值为列表的字典的所有可能唯一子集

生成字典的所有键值对组合子集

给定字典:

d = {
  "Samsung": ["2.3","127","early"],
  "google": ["pixel","15"],
  "IBM": ["Z","7.13","main","VM"]
}

需求

生成所有可能的唯一子集,每个子集包含若干键值对(每个键对应其列表中的一个值),子集顺序无关,需覆盖所有组合。示例输出:

{Samsung: "2.3"}
{Samsung: "2.3", google: "pixel"}
{Samsung: "2.3", google: "pixel", IBM: "Z"}
{Samsung: "2.3", google: "pixel", IBM: "7.13"}
……
{Samsung: "127"}
{Samsung: "127",google:"pixel"}

注意:普通全排列方法无法生成这类包含部分键的子集,需要针对性处理。


解决方案(Python实现)

from itertools import combinations, product

d = {
    "Samsung": ["2.3", "127", "early"],
    "google": ["pixel", "15"],
    "IBM": ["Z", "7.13", "main", "VM"]
}

keys = list(d.keys())
result = []

# 遍历所有可能的键子集规模:1个键、2个键...直到所有键
for subset_size in range(1, len(keys) + 1):
    # 生成当前规模下的所有键组合
    for key_group in combinations(keys, subset_size):
        # 获取每个键对应的候选值列表
        value_options = [d[key] for key in key_group]
        # 生成值的笛卡尔积:每个键选一个值的所有组合
        for value_group in product(*value_options):
            # 组合成字典并加入结果集
            subset_dict = dict(zip(key_group, value_group))
            result.append(subset_dict)

# 按示例格式输出所有子集
for sub in result:
    print("{" + ", ".join([f"{k}: {repr(v)}" for k, v in sub.items()]) + "}")

代码逻辑说明

  1. 先提取字典的所有键,生成所有键的子集组合(从1个键到全部键)
  2. 对每个键子集,取出对应的值列表,用笛卡尔积生成每个键选一个值的所有可能组合
  3. 将键子集和对应的值组合打包成字典,收集所有结果后按格式输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:35:25