pandas 在for循环python中处理空列表

qpgpyjmq  于 2023-10-14  发布在  Python
关注(0)|答案(3)|浏览(136)

我遇到过一种情况,我正在处理嵌套字典的嵌套列表。有时候,字典中的一个键会有一个空列表。所以,当迭代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

如果有人能帮我解决这个问题,我会很感激的。谢谢大家!

qfe3c7zg

qfe3c7zg1#

请不要使用list作为变量名。

您可以简单地执行if item['institutions'],它只会在列表非空时进行

lst = [{'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 = []
institution_id = []
for item in lst:
    author_id.append(item['author']['id'])
    if item['institutions']:
        institution_id.append(item['institutions'][0]['id'])
kuuvgm7e

kuuvgm7e2#

在列表为空时,您不能访问任何索引,因为list[0]意味着您访问列表中的第一项。相反,您应该首先检查列表是否包含任何项目,如:

if len(list) > 0:
njthzxwz

njthzxwz3#

在第五行,您尝试访问0索引,即使它不存在。
而不是if item['institutions'][0]:,尝试if len(item['institutions']) > 0:

for item in list:
    author_id.append(item['author']['id'])
    if len(item['institutions']) > 0:
        institution_id.append(item['institutions'][0]['id'])
institution_id

相关问题