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

求助:如何为Python字典组合添加条件过滤逻辑

基于条件生成符合规则的字典组合

需求说明

主字典定义了各字段的可选值:

payload = {
    "type": ["sedan","suv"],
    "name": ["car1","car2"],
    "color": ["black","white","green"],
    "version": ["mid","top"],
    "model": ["2","5","13"],
}

条件规则:

color_rules = {
    "car1": ["black","green"],
    "car2":["white"]
}
model_rules = {
    "mid":["5"],
    "top":["13","5"]
}

规则细节:

  • 当name为"car1"时,color只能选"black"或"green";
  • 当name为"car2"时,color只能选"white";
  • 当version为"mid"时,model只能选"5";
  • 当version为"top"时,model可选"13"或"5"。

预期输出:

[
{'type': 'sedan', 'name': 'car1', 'color': 'black', 'version': 'mid', 'model': '5'}, 
{'type': 'sedan', 'name': 'car1', 'color': 'black', 'version': 'top', 'model': '5'}, 
{'type': 'sedan', 'name': 'car1', 'color': 'black', 'version': 'top', 'model': '13'}, 
{'type': 'sedan', 'name': 'car1', 'color': 'green', 'version': 'mid', 'model': '5'}, 
{'type': 'sedan', 'name': 'car1', 'color': 'green', 'version': 'top', 'model': '5'}, 
{'type': 'sedan', 'name': 'car1', 'color': 'green', 'version': 'top', 'model': '13'}, 
{'type': 'suv', 'name': 'car1', 'color': 'black', 'version': 'top', 'model': '5'}, 
{'type': 'suv', 'name': 'car1', 'color': 'black', 'version': 'top', 'model': '13'}, 
{'type': 'suv', 'name': 'car1', 'color': 'black', 'version': 'mid', 'model': '5'}, 
{'type': 'suv', 'name': 'car1', 'color': 'green', 'version': 'top', 'model': '5'}, 
{'type': 'suv', 'name': 'car1', 'color': 'green', 'version': 'top', 'model': '13'},
{'type': 'suv', 'name': 'car1', 'color': 'green', 'version': 'mid', 'model': '5'},
{'type': 'sedan', 'name': 'car2', 'color': 'white', 'version': 'mid', 'model': '5'}, 
{'type': 'sedan', 'name': 'car2', 'color': 'white', 'version': 'top', 'model': '5'}, 
{'type': 'sedan', 'name': 'car2', 'color': 'white', 'version': 'top', 'model': '13'}, 
{'type': 'suv', 'name': 'car2', 'color': 'white', 'version': 'mid', 'model': '5'}, 
{'type': 'suv', 'name': 'car2', 'color': 'white', 'version': 'top', 'model': '5'}, 
{'type': 'suv', 'name': 'car2', 'color': 'white', 'version': 'top', 'model': '13'}  
]

现有代码(会生成所有组合,未加条件):

import itertools
payload = {
    "type": ["sedan","suv"],
    "name": ["car1","car2"],
    "color": ["black","white","green"],
    "version": ["mid","top"],
    "model": ["2","5","13"],
}

color_rules = {
    "car1": ["black","green"],
    "car2":["white"]
}
model_rules = {
    "mid":["5"],
    "top":["13","5"]
}
output = [dict(zip(payload.keys(), a)) for a in itertools.product(*payload.values())]
print(output)

修改方案

在生成所有组合后,添加条件过滤逻辑,只保留符合规则的组合:

import itertools

payload = {
    "type": ["sedan","suv"],
    "name": ["car1","car2"],
    "color": ["black","white","green"],
    "version": ["mid","top"],
    "model": ["2","5","13"],
}

color_rules = {
    "car1": ["black","green"],
    "car2":["white"]
}
model_rules = {
    "mid":["5"],
    "top":["13","5"]
}

output = []
# 遍历所有生成的组合
for item in itertools.product(*payload.values()):
    combo = dict(zip(payload.keys(), item))
    # 检查颜色是否符合对应name的规则
    if combo["color"] not in color_rules[combo["name"]]:
        continue
    # 检查型号是否符合对应version的规则
    if combo["model"] not in model_rules[combo["version"]]:
        continue
    # 符合所有规则则加入输出列表
    output.append(combo)

# 打印最终结果
for elem in output:
    print(elem)

逻辑说明

  1. 先通过itertools.product生成所有字段的笛卡尔积组合;
  2. 将每个组合转换为字典后,依次校验两个规则:
    • 根据当前组合的name值,匹配对应颜色规则,不符合则跳过该组合;
    • 根据当前组合的version值,匹配对应型号规则,不符合则跳过该组合;
  3. 仅保留同时满足两个规则的组合,最终得到符合要求的输出列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:20:50