gpt4 book ai didi

biopython - 如何连接两个或多个由 Bio.SeqIO.index 创建的词典?

转载 作者:行者123 更新时间:2023-12-04 06:09:45 24 4
gpt4 key购买 nike

我希望能够加入存储在“indata”和“pairdata”中的两个“字典”,但是这段代码,

indata = SeqIO.index(infile, infmt)
pairdata = SeqIO.index(pairfile, infmt)
indata.update(pairdata)

产生以下错误:
indata.update(pairdata)
TypeError: update() takes exactly 1 argument (2 given)

我试过使用,
indata = SeqIO.to_dict(SeqIO.parse(infile, infmt))
pairdata = SeqIO.to_dict(SeqIO.parse(pairfile, infmt))
indata.update(pairdata)

这确实有效,但生成的字典占用了太多内存,对于我拥有的 infile 和 pairfile 的大小来说不实用。

我探索的最后一个选项是:
indata = SeqIO.index_db(indexfile, [infile, pairfile], infmt)

效果很好,但速度很慢。有谁知道我如何/是否可以成功加入上面第一个示例中的两个索引?

最佳答案

SeqIO.index返回一个只读的类似字典的对象,所以 update将无法处理它(对于令人困惑的错误消息深表歉意;我刚刚在主 Biopython 存储库中检查了该问题的修复程序)。

最好的方法是使用 index_db,它会更慢但
只需要索引文件一次,或者定义一个更高级别的对象
它的作用就像是您的多个文件的字典。这里有一个
简单的例子:

from Bio import SeqIO

class MultiIndexDict:
def __init__(self, *indexes):
self._indexes = indexes
def __getitem__(self, key):
for idx in self._indexes:
try:
return idx[key]
except KeyError:
pass
raise KeyError("{0} not found".format(key))

indata = SeqIO.index("f001", "fasta")
pairdata = SeqIO.index("f002", "fasta")
combo = MultiIndexDict(indata, pairdata)

print combo['gi|3318709|pdb|1A91|'].description
print combo['gi|1348917|gb|G26685|G26685'].description
print combo["key_failure"]

关于biopython - 如何连接两个或多个由 Bio.SeqIO.index 创建的词典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7906766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com