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
相关产品推荐
相关产品推荐

