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

Python3:遍历数据库行匹配字典值的高效优化方案

优化方案:用映射字典替代大量if判断

你的问题核心是用一堆重复的if语句做匹配,既不美观也难维护,换用字典映射就能彻底解决这个问题,而且扩展性极强,新增条目时只需要加配置,不用改逻辑。

第一步:构建映射关系

先把d1的键和对应的d2单元格键关联起来,如果d2的键是d1键加_xl后缀(比如name对应name_xl),可以自动生成映射;如果命名没规律,就手动写:

# 情况1:d2键是d1键加_xl后缀,自动生成映射
key_mapping = {k: f"{k}_xl" for k in d1.keys()}

# 情况2:命名无规律,手动指定映射(按需修改)
key_mapping = {
    "name": "name_xl",
    "date": "date_xl",
    "stage": "stage_xl",
    "prod": "prod_xl",
    "start_date": "start_date_xl",
    "end_date": "end_date_xl",
    "mixers": "mixers_xl",
    "mix_tech": "mix_tech_xl",
    "assistant": "assistant_xl"
}

第二步:反转d1实现快速查找

把d1的键值对反转成「值→键」的字典,这样能通过b[2]的值直接找到对应的d1键,不用逐个判断:

d1_value_to_key = {v: k for k, v in d1.items()}

第三步:简化遍历逻辑

现在遍历matching_items时,只需要两次字典查找就能完成赋值,完全替代所有if语句:

z = workbook["Spec"]
matching_items = select_all_from_db("SELECT * FROM spec_sheets where item_id LIKE '%s'" % a)

# 反转d1,值→键映射
d1_value_to_key = {v: k for k, v in d1.items()}
# 构建d1键到d2单元格键的映射
key_mapping = {k: f"{k}_xl" for k in d1.keys()}  # 用自动生成的示例,按需替换

for b in matching_items:
    current_value = b[2]
    # 找到当前值对应的d1键
    d1_key = d1_value_to_key.get(current_value)
    if d1_key:
        # 找到对应的Excel单元格键
        xl_cell = key_mapping.get(d1_key)
        if xl_cell:
            z[xl_cell] = b[1]

为什么这么做更好?

  • 维护成本低:后续新增d1条目时,只要保证key_mapping里有对应关系(自动生成的话甚至不用管),不用再加新的if语句。
  • 效率更高:字典查找是O(1)时间复杂度,比逐个判断的O(n)快得多,条目越多优势越明显。
  • 代码更简洁:把重复的判断逻辑提炼成配置,可读性大幅提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:20:58