我可以在Python中将defaultdict或dict转换为ordereddict吗?

2024-07-04 17:02:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图解析一个fasta文件,然后我想创建另一个文件,它将包含fasta文件的所有可能的第100个ATGCN序列。在

例如:

chr1_1-100:ATGC.....GC  
chr1_2-101:ATGC.....GC  
chr1_3-102:ATGC.....GC  
......................  
chr22_1-100:ATGC....cG  
chr22_2-101:ATGC....cG  
......................

我用了以下代码:

^{pr2}$

问题是写入的文件不是有序。意味着它可以先包含chr10,然后再包含chr2。在

问题是因为解析是使用dict(完成的,例如SeqIO.to_dict(SeqIO.parse(open(i1), 'fasta'))。在

那么,我能把dict转换成有序的dict吗,这样我的文件就变得有序了吗?或者有没有其他方法可以解决这个问题?在


Tags: 文件代码序列cggcdictfastachr1
3条回答

别费心做任何形式的口述。你不需要dict给你的属性,你需要dict转换丢失的信息。来自SeqIO.parse的记录迭代器已经为您提供了所需的:

with open(i1) as infile, open(out, 'w') as f:
    for record in SeqIO.parse(infile, 'fasta'):
        # Do what you were going to do with the record.

如果您需要dict键中的信息,那就是record.id。在

您已经正确地确定了问题的原因:to_dict方法返回一个dict,这意味着顺序已经丢失。从那时起,就没有办法恢复订单了。在

此外,您并没有真正使用dict,因为您是按顺序处理所有事情,所以您可以迭代:

for record in SeqIO.parse(open(i1), 'fasta')) :
    key = record.id
    long_seq = record.seq
    ...

Can I convert a defaultdict or dict to an ordereddict in Python?

是的,您可以转换它OrderedDict(any_dict),如果您需要排序键,可以在创建OrderedDict之前对它们进行排序:

>>> from collections import OrderedDict
>>> d = {'c':'c', 'b':'b', 'a':'a'}
>>> o = OrderedDict((key, d[key]) for key in sorted(d))
>>> o.items()[0]
('a', 'a')
>>> o.items()[1]
('b', 'b')
>>> o.items()[2]
('c', 'c')

相关问题 更多 >

    热门问题