【问题标题】:Traceback KeyError when Entrez increases retmax当 Entrez 增加 retmax 时 Traceback KeyError
【发布时间】:2018-11-05 22:54:09
【问题描述】:

我正在尝试使用 biopython entrez 收集已发布的文章列表。我想从 medline 格式中收集文章的某些部分。如果没有设置 retmax,我在下面编写的代码可以工作。它默认为 20 篇文章,但是,我想收集更多的文章。如果我将 retmax 设置为更高的数字,我会收到以下错误。

#!/usr/bin/env python
from Bio import Entrez, Medline

Entrez.email = "foobar@gmail.edu"    
handle = Entrez.esearch(db="pubmed",
                        term="stanford[Affiliation]", retmax=1000)
record = Entrez.read(handle)
pmid_list = record["IdList"]

more_data = Entrez.efetch(db="pubmed", id=",".join(pmid_list), rettype="medline", retmode="text")
all_records = Medline.parse(more_data)

record_list = []
for record in all_records:
    record_dict = {'ID': record['PMID'],
                    'Title': record['TI'],
                    'Publication Date': record['DP'],
                    'Author': record['AU'],
                    'Institute': record['AD']}
    record_list.append(record_dict)

然后我收到错误

Traceback (most recent call last):
  File "./pubmed_pull.py", line 42, in <module> 
    'Institute': record['AD']}
KeyError: 'AD'

如果我增加文章数量,我不确定为什么会出现错误。

【问题讨论】:

  • 无法重现

标签: python bioinformatics biopython pubmed


【解决方案1】:

不要使用dict[key] 获取密钥,而是使用dict.get(key)。如果密钥不存在,这样做将返回None

for record in all_records:
    record_dict = {'ID': record.get('PMID'),
                    'Title': record.get('TI'),
                    'Publication Date': record.get('DP'),
                    'Author': record.get('AU'),
                    'Institute': record.get('AD')}

Some further reading

【讨论】:

  • 谢谢,这已经解决了。缺少键是问题
猜你喜欢
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
相关资源
最近更新 更多