Python3嵌套列表/字典迭代优化:MongoDB文档数据提取简化方案
简化MongoDB文档中指定日期的数量提取代码
嘿,你的代码确实能正常运行,但嵌套了太多层循环,不仅读起来费劲,后续维护也容易出问题。咱们可以针对数据的结构特点,用更精准、简洁的方式来实现:
方式一:精准循环+提前终止
直接利用已知的键名(name、Dates、Date)来定位,避免遍历所有无关键值对,同时找到目标后立刻终止循环,提升效率:
old_qte = None # 先定位到名称为Aspirin的药品条目 for item in a: if item.get('name') == 'Aspirin': # 遍历该药品的日期记录列表 for date_entry in item.get('Dates', []): if date_entry.get('Date') == '2019-07-09': old_qte = date_entry break # 找到目标日期记录就停止遍历 break # 找到目标药品就停止遍历整个列表 if old_qte: print(old_qte['Qty'], old_qte)
方式二:生成器表达式+短路查找
用生成器表达式层层筛选,配合next()函数直接获取第一个匹配的结果,代码更紧凑:
# 生成器会自动筛选符合条件的记录,next()取第一个匹配项,无结果则返回None target_entry = next( (entry for item in a if item.get('name') == 'Aspirin' for entry in item.get('Dates', []) if entry.get('Date') == '2019-07-09'), None ) if target_entry: print(target_entry['Qty'], target_entry)
这两种方式的核心思路都是避免无意义的键遍历,直接针对数据结构的已知字段做定位,逻辑清晰很多,也更容易维护。
内容的提问来源于stack exchange,提问作者Tobin
相关产品推荐
相关产品推荐

