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

如何从字典列表中取值,不存在对应键时赋值为None?

解决嵌套字段/属性不存在时赋值为None的问题

根据你的需求,以下是几种针对不同数据结构的实现方案:

情况1:数据为字典结构(通过键访问)

如果packet[i]是字典,payload是字典键,time是子字典的键,可以用字典的get()方法链式处理:

# 直接链式调用get,不存在时自动返回None
packet_time = packet[i].get("payload", {}).get("time")
  • 原理:第一个get("payload", {})如果找不到payload键,返回空字典;空字典调用get("time")时,默认返回None。

如果嵌套层级较多,可封装通用函数递归获取:

def get_nested_dict_value(data, key_chain, default=None):
    current = data
    for key in key_chain:
        if not isinstance(current, dict) or key not in current:
            return default
        current = current[key]
    return current

# 使用示例:传入键的列表
packet_time = get_nested_dict_value(packet[i], ["payload", "time"])

情况2:数据为对象结构(通过属性访问)

如果packet[i]是类实例,payload是实例属性,time是payload的属性,用getattr()函数链式处理:

# 链式调用getattr,每一层不存在时返回None
packet_time = getattr(getattr(packet[i], "payload", None), "time", None)
  • 原理:第一个getattr(..., "payload", None)如果找不到payload属性,返回None;对None调用getattr(..., "time", None)时,直接返回None。

同样可封装通用函数处理多层属性:

def get_nested_obj_attr(obj, attr_chain, default=None):
    current = obj
    for attr in attr_chain:
        try:
            current = getattr(current, attr)
        except AttributeError:
            return default
        if current is None:
            return default
    return current

# 使用示例:传入属性名的列表
packet_time = get_nested_obj_attr(packet[i], ["payload", "time"])

混合结构(字典与对象嵌套)

如果嵌套结构中同时存在字典和对象,最简单的方式是用try-except捕获异常:

try:
    packet_time = packet[i].payload.time  # 根据实际结构调整访问方式
except (AttributeError, KeyError):
    packet_time = None

这种方式直观简洁,适合嵌套层级较少的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:30:04