如何遍历任意长度字典中各键对应整数1到最大值的所有组合
解决方案
直接用Python标准库itertools.product实现笛卡尔积遍历即可,天然适配任意长度的字典,无需写嵌套逻辑:
import itertools def generate_all_combinations(input_dict): # 提取字典的键列表,以及每个键对应的取值范围(1到对应最大值,包含两端) keys = list(input_dict.keys()) value_ranges = [range(1, max_val + 1) for max_val in input_dict.values()] # 遍历所有笛卡尔积组合,生成对应字典 for values in itertools.product(*value_ranges): yield dict(zip(keys, values))
使用示例
# 三键字典测试 myDict = {"a":1,"b":2,"c":3} for combo in generate_all_combinations(myDict): print(combo) # 四键字典测试 myDict2 = {"a":1,"b":2,"c":3,"d":5} for combo in generate_all_combinations(myDict2): # 也可以直接对返回的字典做修改操作,符合你的使用习惯 # combo["c"] = 2 print(combo)
说明
itertools.product支持接收任意个可迭代对象作为参数,返回所有元素的笛卡尔积组合,完全匹配你需要的全组合遍历需求- 生成器返回的每个组合都是独立的字典对象,你可以直接对其做修改操作
- 无需调整代码即可适配任意键数量的输入字典,时间复杂度为所有键的最大值乘积,和手动写嵌套循环的效率一致
内容的提问来源于stack exchange,提问作者erdemozor
相关产品推荐
相关产品推荐

