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

Python中字典键组合对应值的笛卡尔积求解优化

优雅实现字典中n个键组合的笛卡尔积计算

给定如下值为集合类型的字典:

dct={'k1':{1,2,3,4},'k2':{100,200},'k3':{1000,2000,3000,4000},'k4':{25,50}}

需求是获取所有指定数量(比如3个)键的组合对应值的笛卡尔积,例如:

  • 键组合'k1','k2','k3'对应笛卡尔积:product({1,2,3,4}, {100,200}, {1000,2000,3000,4000})
  • 键组合'k1','k2','k4'对应笛卡尔积:product({1,2,3,4}, {100,200}, {25,50})

原代码仅适配3个键的组合,写法不够Pythonic:

for x,y,z in combinations(dct.keys(),3):
    for p in product(dct[x],dct[y],dct[z]):
        # 处理逻辑

通用改进方案

结合itertools工具与解包语法,实现支持任意n个键组合的通用写法:

from itertools import combinations, product

dct={'k1':{1,2,3,4},'k2':{100,200},'k3':{1000,2000,3000,4000},'k4':{25,50}}

# 定义要选取的键的数量n,可按需修改
n = 3
for key_comb in combinations(dct.keys(), n):
    # 解包当前键组合对应的所有值集合,传入product
    for item in product(*(dct[key] for key in key_comb)):
        # 替换为实际处理逻辑,如打印、存储结果等
        print(item)

方案说明

  • 用combinations(dct.keys(), n)生成所有n个键的组合,无需硬编码变量名,适配任意n值
  • 通过生成器表达式(dct[key] for key in key_comb)批量获取组合中每个键对应的值集合
  • 用*解包生成器结果作为product的参数,符合Python简洁风格,彻底摆脱固定数量限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:57:41