我遇到过一种情况,我正在处理嵌套字典的嵌套列表。有时候,字典中的一个键会有一个空列表。所以,当迭代for循环时,我得到了和列表索引超出范围的错误。
下面,我将给予你一小部分来自于Jerrame的数据:
list = [{'author_position': 'first',
'author': {'id': 'https://openalex.org/A5012408034',
'display_name': 'Vincent S. Tagliabracci',
'orcid': 'https://orcid.org/0000-0002-9735-4678'},
'institutions': [],
'is_corresponding': False,
'raw_affiliation_string': 'Molecular Biology',
'raw_affiliation_strings': ['Molecular Biology']},
{'author_position': 'last',
'author': {'id': 'https://openalex.org/A5076217348',
'display_name': 'Peter J. Roach',
'orcid': None},
'institutions': [{'id': 'https://openalex.org/I55769427',
'display_name': 'Indiana University – Purdue University Indianapolis',
'ror': 'https://ror.org/05gxnyn08',
'country_code': 'US',
'type': 'education'}],
'is_corresponding': False,
'raw_affiliation_string': 'Indiana-University Purdue-University Indianapolis',
'raw_affiliation_strings': ['Indiana-University Purdue-University Indianapolis']}]
这个列表有两个嵌套字典。我试图提取一个信息列表:
[author_id,author_name,institution_id,institution_name,etc.]]在列表或元组中
如果你注意到,第一个项目“机构”是一个空列表,而第二个不是空的,这让我很难。下面是我的代码片段:
author_id = []
institution_id = []
for item in list:
author_id.append(item['author']['id'])
if item['institutions'][0]:
institution_id.append(item['institutions'][0]['id'])
institution_id
我得到的错误是:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
/home/azureuser/******.ipynb Cell 20 line 5
3 for item in a[1]:
4 author_id.append(item['author']['id'])
----> 5 if item['institutions'][0]:
6 institution_id.append(item['institutions'][0]['id'])
7 institution_id
IndexError: list index out of range
如果有人能帮我解决这个问题,我会很感激的。谢谢大家!
3条答案
按热度按时间qfe3c7zg1#
请不要使用
list
作为变量名。您可以简单地执行
if item['institutions']
,它只会在列表非空时进行kuuvgm7e2#
在列表为空时,您不能访问任何索引,因为
list[0]
意味着您访问列表中的第一项。相反,您应该首先检查列表是否包含任何项目,如:njthzxwz3#
在第五行,您尝试访问0索引,即使它不存在。
而不是
if item['institutions'][0]:
,尝试if len(item['institutions']) > 0:
。