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

Python中遍历含空列表的嵌套字典时的索引越界问题求助

解决嵌套字典列表中遍历空列表触发的IndexError问题

问题分析

你当前代码报错的核心原因是:直接通过item['institutions'][0]访问列表元素,但当institutions对应空列表时,不存在索引为0的元素,因此触发IndexError。

解决方案

核心思路是先判断institutions列表是否非空,再去访问其中的元素;同时可为无机构的情况设置默认值(比如None),保证提取出的各数据列表长度一致。

修正基础代码

针对你提取author_id和institution_id的需求,修改后的代码如下:

author_id = []
institution_id = []
# 注意:不要用list作为变量名,会覆盖Python内置的list类型
for item in list_data:
    author_id.append(item['author']['id'])
    # 先判断institutions是否非空,再访问元素
    if item['institutions']:
        institution_id.append(item['institutions'][0]['id'])
    else:
        # 为空时添加None或自定义占位符
        institution_id.append(None)

扩展:提取更多字段

如果需要提取author_name、institution_name等更多信息,可以生成规整的字典列表:

result = []
for item in list_data:
    author_info = item['author']
    # 初始化机构相关字段为默认值
    inst_id = None
    inst_name = None
    if item['institutions']:
        inst = item['institutions'][0]
        inst_id = inst['id']
        inst_name = inst['display_name']
    
    result.append({
        'author_id': author_info['id'],
        'author_name': author_info['display_name'],
        'institution_id': inst_id,
        'institution_name': inst_name
    })

简洁写法(三元表达式)

如果追求代码简洁,可用三元表达式替代if-else:

author_id = []
institution_id = []
for item in list_data:
    author_id.append(item['author']['id'])
    # 非空则取第一个机构id,否则设为None
    inst_id = item['institutions'][0]['id'] if item['institutions'] else None
    institution_id.append(inst_id)

注意事项

  • 避免使用list作为变量名,这会覆盖Python内置的list类型,引发意外错误。
  • 如果institutions可能包含多个机构元素,需根据需求决定是仅取第一个、遍历所有元素,还是做其他处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:02:32