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

如何高效获取嵌套字典与数组中的值并在不存在时返回默认值

最优方案:基于 try-except 实现,完全符合KISS原则

这是Python中处理深路径取值最简洁、性能最高的实现,完全满足你的所有要求:

  1. 路径任意节点(键不存在、列表下标越界、类型不匹配)查找失败时,直接返回预设默认值,无需后续查找
  2. 路径完全匹配时直接返回对应值,空列表等合法值不会触发异常,会正常返回
  3. 路径存在时几乎无额外性能开销,远高于遍历节点逐个判断的方案

场景专属快速实现

如果不需要通用工具,直接针对你的取值场景包裹异常处理即可:

# 可根据需求修改默认值为 []、{} 等
default_value = ""

try:
    test_print = test['objects'][0]['productInfo'][0]['merchPrice']['promoExclusions'][0]
except (KeyError, IndexError, TypeError):
    test_print = default_value

print(test_print)

如果你需要获取promoExclusions本身(包括空列表的情况),只需要去掉路径最后的[0]即可,空列表会正常返回,不会进入异常分支。

通用工具函数实现

如果需要适配不同的取值路径,可以封装为通用的deep_get函数:

def deep_get(obj, path: list, default=None):
    try:
        for key in path:
            obj = obj[key]
        return obj
    except (KeyError, IndexError, TypeError):
        return default

调用示例:

# 获取指定下标的promoExclusions元素,失败返回空字符串
test_print = deep_get(test, ['objects', 0, 'productInfo', 0, 'merchPrice', 'promoExclusions', 0], default="")
print(test_print)

# 获取promoExclusions列表本身,失败返回空列表
promo_exclusions = deep_get(test, ['objects', 0, 'productInfo', 0, 'merchPrice', 'promoExclusions'], default=[])
print(promo_exclusions)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:15:03