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个键到全部键)
- 对每个键子集,取出对应的值列表,用笛卡尔积生成每个键选一个值的所有可能组合
- 将键子集和对应的值组合打包成字典,收集所有结果后按格式输出
内容的提问来源于stack exchange,提问作者user1922979
相关产品推荐
相关产品推荐

