Python如何生成字典中不同长度列表的所有任意排列组合
实现方案
核心逻辑
- 遍历所有可选的键数量k,取值范围为1到字典总键数
- 对每个k,生成所有长度为k的键的排列,覆盖任意部分键、任意顺序的需求
- 对每个排列对应的多组值列表,取笛卡尔积得到所有值的组合
- 将每个值组合按顺序拼接为空格分隔的字符串,存入结果集
完整代码
from itertools import permutations, product def generate_all_keywords(input_dict): all_keys = list(input_dict.keys()) all_keywords = [] # 遍历所有可选的键数量,从1到总键数 for k in range(1, len(all_keys) + 1): # 生成所有长度为k的键的排列,覆盖任意选键、任意顺序的需求 for key_perm in permutations(all_keys, k): # 拿到当前排列对应的所有值列表 selected_lists = [input_dict[key] for key in key_perm] # 取笛卡尔积得到所有值组合,每个组合从各列表各取1个值 for value_combo in product(*selected_lists): # 拼接为空格分隔的字符串 all_keywords.append(" ".join(value_combo)) # 如果需要去重,可以替换为 return list(set(all_keywords)) return all_keywords
测试示例
# 用你给出的结构测试 test_dict = { 'basis1': ['key11', 'key12'], 'basis2': ['key21'], 'basis3': ['key31', 'key32'] } result = generate_all_keywords(test_dict) print(result)
该实现不需要手动预设任何formula,字典键的数量任意增减都可以直接适配,完全覆盖你需要的所有组合场景。
内容的提问来源于stack exchange,提问作者drkwng
相关产品推荐
相关产品推荐

