Python 3.9列表循环效率优化:按JSON分类购物清单的代码优化问询
优化方案
核心优化点
- 用字典存储各过道分类结果,替代手动声明数十个列表变量,完全消除冗长的if-elif判断链
- 将购物列表转为集合,将商品匹配的时间复杂度从O(n)降到O(1),同时砍掉两层多余的嵌套循环,执行效率大幅提升
- 支持动态适配JSON文件里的所有过道配置,后续新增过道无需修改代码逻辑
优化后代码
import json shopping_list = ["canned tomatoes", "bread", "eggs", "milk"] # 转集合加速匹配 shopping_set = set(shopping_list) # 用字典存各过道的商品,key为过道编号,value为对应商品列表 isle_items = {} # 特殊映射规则,对应原代码中i=6时存到过道5的逻辑 special_isle_map = {6:5} with open("isleTypes.json") as f: data = json.load(f) # 遍历所有过道配置,如需限制过道编号范围可加判断 2<=isle_num<=17 for isle_key in data: # 提取过道编号,比如"_2"提取出2 isle_num = int(isle_key.strip("_")) # 应用特殊映射规则 target_isle = special_isle_map.get(isle_num, isle_num) # 初始化对应过道的列表 if target_isle not in isle_items: isle_items[target_isle] = [] # 遍历当前过道的所有商品,匹配购物清单 for item in data[isle_key]: if item in shopping_set: isle_items[target_isle].append(item) # 按需读取对应过道的商品,比如打印过道2的商品 for item in isle_items.get(2, []): print(item)
扩展说明
如果后续需要新增特殊映射规则,直接往special_isle_map字典加键值对即可,不需要修改遍历逻辑。如果需要输出所有过道的分类结果,直接遍历isle_items字典即可。
内容的提问来源于stack exchange,提问作者youChoose10
相关产品推荐
相关产品推荐

