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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:57:04