我正在处理一个简单的脚本,通过字符串循环,在这种情况下,从文件中的dna序列,并计算每个dna字符串的词频率(每次相同的单词列表,新值列表)。 我的方法(见下文)使用字典将单词存储为键并将每个单词的频率存储为一个值,但我坚持尝试将新值(对于每个后续dna记录)添加到现有的键。迭代通过现有的键和更新字典python
为RECORD1很容易(像 “GTACGTACATTT ......”),我的字典里是这样的:
{ 'GTAC': '2', 'ATTT':1,...}
然后,对于$ foo中的任何其他记录,我想更新此字典(包含相同的密钥): {'GTAC':'2','1',...,'ATTT':1, 0,...}
from Bio import SeqIO
def tetra_freq(sequence):
counts = {}
for record in SeqIO.parse(sequence, 'fasta'):
newseq=record.seq
for base1 in ['A', 'T', 'G', 'C']:
for base2 in ['A', 'T', 'G', 'C']:
for base3 in ['A', 'T', 'G', 'C']:
for base4 in ['A','T','G','C']:
tetranucleotide = base1 + base2 + base3 + base4
count = newseq.count(tetranucleotide)
if tetranucleotide in counts.keys():
counts.update(count)
else:
counts[tetranucleotide] = count
print(counts)
tetra_freq('$foo')
神圣的筑巢,蝙蝠侠! – squiguy
字典的'update'函数需要一个字典作为输入:'counts.update({tetranucleotide:count})'。幸运的是,这将更新或为您创建密钥。 –
您可以使用itertools.product('ATGC',repeat = 4)代替那个讨厌的嵌套,看看它的价值。 – JackGibbs