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
相关产品推荐
相关产品推荐

