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
相关产品推荐
相关产品推荐

