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

Python遍历字典列表时处理空events列表避免索引越界

解决提取字典列表中events字段时的索引越界问题

问题背景

你需要处理一个字典列表,提取每个字典内events键对应的列表数据:

  • 当events列表非空时,取最后一个元素的message值
  • 当events列表为空时,返回空列表
    现有代码直接用[-1]获取最后一个元素,空列表时会触发IndexError: list index out of range错误。

示例输入

data = [
    {"id": 1, "events": [{"message": "登录成功"}, {"message": "修改密码"}]},
    {"id": 2, "events": []},
    {"id": 3, "events": [{"message": "提交订单"}]}
]

报错的现有代码

result = []
for item in data:
    event = item["events"][-1]["message"]
    result.append({"id": item["id"], "event": event})

报错信息

IndexError: list index out of range

预期输出

[
    {"id": 1, "event": "修改密码"},
    {"id": 2, "event": []},
    {"id": 3, "event": "提交订单"}
]

解决方案

提供三种简洁可靠的实现方式,避免索引越界:

方式1:直观条件判断

先检查events列表是否为空,再执行对应逻辑:

result = []
for item in data:
    events = item["events"]
    event_msg = events[-1]["message"] if events else []
    result.append({"id": item["id"], "event": event_msg})

方式2:列表推导式(简洁写法)

用一行推导式完成逻辑,适合代码追求精简的场景:

result = [
    {
        "id": item["id"],
        "event": item["events"][-1]["message"] if item["events"] else []
    }
    for item in data
]

方式3:兼容events键不存在的场景

如果字典可能缺少events键,用item.get("events", [])设置默认空列表,再通过反向遍历取最后一个元素:

result = [
    {
        "id": item["id"],
        "event": next((e["message"] for e in reversed(item.get("events", []))), [])
    }
    for item in data
]

验证结果

运行以上任意代码,输出都会和预期一致,且不会触发索引错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:20:30