【发布时间】:2014-05-04 02:59:35
【问题描述】:
我正在编写一个简单的脚本,该脚本循环遍历字符串,在本例中为来自文件的 dna 序列,并计算每个 dna 字符串的词频(每次相同的词列表,新的值列表)。 我的方法(见下文)使用字典将单词存储为键,并将每个单词的频率存储为值,但我一直在尝试向现有键添加新值(针对每个后续 dna 记录)。
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')
【问题讨论】:
-
神圣的巢穴,蝙蝠侠!
-
字典的
update函数需要字典作为输入:counts.update({tetranucleotide: count})。幸运的是,这将为您更新或创建密钥。 -
您可以使用 itertools.product('ATGC', repeat=4) 而不是那种讨厌的嵌套,物有所值。
-
感谢@JackGibbs,嵌套是基于我在网上找到的生物学家的 python 入门。主要障碍仍然存在..
-
@Thane Brimhall 感谢您的评论。不幸的是,这似乎只是将一个记录中的值添加到前一个记录(即 {GTAC:1,TTAA:2} 变为 {GTAC:2,TTAA:4} 而不是 {GTAC:1,1,TTAA:2,2}
标签: python