更新字典中的键名 python

Update key name in a dictionary python

我在字典中有以下 fasta 文件,格式如下:

from Bio import SeqIO

alignment_file = '/Users/dissertation/Desktop/Alignment 4 sequences.fasta'

seq_dict = {rec.id : rec.seq for rec in SeqIO.parse(alignment_file, "fasta")}

这给了我以下输入:

{'NC_000962.3': Seq('ctgttaccgagatttcttcgtcgtttgttcttggaaagacagcgctggggatcg...NNN'),
 'NC_008596.1': Seq('------------------------------------------------------...ccg'),
 'NC_009525.1': Seq('ctgttaccgagatttcttcgtcgtttgttcttggaaagacagcgctggggatcg...NNN'),
 'NC_002945.4': Seq('ctgttaccgagatttcttcgtcgtttgttcttggaaagacagcgctggggatcg...NNN')}

这里唯一的问题是我想替换键名,以便在将序列与代码的其他部分进行比较时更容易识别。所以我尝试了以下方法:

name_list = ['Tuberculosis', 'Smegmatis', 'H37Ra', 'Bovis']

for key in seq_dict:
    for name in name_list:
        seq_dict[name[x]]= seq_dict[key]
    
seq_dict

但是我收到以下错误:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
/var/folders/pq/ghtv3wj159j681vy0ny3tz9w0000gp/T/ipykernel_47822/1486954832.py in <module>
      9
---> 10 for key in seq_dict:
     11     for name in name_list:
     12         seq_dict[name[x]]= seq_dict[key]

RuntimeError: dictionary changed size during iteration

我知道没有简单直接的方法来更新字典中的键名值,但我不明白其中的错误。有没有办法做类似的事情?

我也试过这个:

seq_dict.update({'NC_000962.3': 'Tuberculosis', 'NC_008596.1': 'Smegmatis', 'NC_009525.1': 'H37Ra', 'NC_002945.4': 'Bovis'})

但这给了我以下输出:

{'NC_000962.3': 'Tuberculosis',
 'NC_008596.1': 'Smegmatis',
 'NC_009525.1': 'H37Ra',
 'NC_002945.4': 'Bovis'}

我的期望输出如下所示:

{'Tuberculosis': Seq('ctgttaccgagatttcttcgtcgtttgttcttggaaagacagcgctggggatcg...NNN'),
 'Smegmatis': Seq('------------------------------------------------------...ccg'),
 'H37Ra': Seq('ctgttaccgagatttcttcgtcgtttgttcttggaaagacagcgctggggatcg...NNN'),
 'Bovis': Seq('ctgttaccgagatttcttcgtcgtttgttcttggaaagacagcgctggggatcg...NNN')}

有人知道如何更新这些吗?

构造一个新字典,然后在一次操作中将其分配给 seq_dict,而不是在迭代它的过程中改变 seq_dict。我认为这就是您的目标:

seq_dict = dict(zip(name_list, seq_dict.values()))

尽管我个人希望有一个从序列 ID 到名称的显式映射,而不是依赖于相同的顺序。