我正在尝试根据 Julia 中文本文件的内容创建一个库,以用于生物信息学问题。该文件的格式如下:
UUU F CUU L AUU I GUU V
UUC F CUC L AUC I GUC V
...
我想制作一本字典,其中键是 3 个字母部分(密码子),条目是一个字母部分(氨基酸)。我可以使用 grep 取出正确的组件:
for m in eachmatch(r"([AUGC]{3,3})\s([A-Z])", file)
codon, aa = m.captures
如果我打印codon
and aa
在这个循环中,我得到了正确的输出(所有密码子,所有氨基酸),但我不知道如何将其放入字典中。如果我做:codons = {codon => aa}
在循环结束时,我最终得到一个仅包含最后一个条目的字典。
我确信语法是非常明显的,但我是生物学家,而不是程序员,所以我的阅读文档 http://julia.readthedocs.org/en/latest/stdlib/base/?highlight=dictionaries#associative-collections没有带我去任何地方。它说:
给定一个字典 D,语法 D[x] 返回键 x 的值(如果存在)或抛出错误,并且 D[x] = y 将键值对 x => y 存储在 D 中(替换任何现有的)键 x 的值)。
但我尝试过codons[codon] = aa
在循环结束时(我用codons = {}
在循环之前),但我收到错误:
no method setindex!(Array{Any,1},SubString{UTF8String},SubString{UTF8String})
at In[35]:5
in anonymous at no file:4
任何帮助将不胜感激。
编辑:显然,我没有正确启动字典。如果我做codons = {"blah" => "blahblah"}
一开始,循环工作并正确填充。所以一个修改后的问题:如何启动空库?
编辑2:最小不起作用的示例:
file = open(readall, "rna_codons.txt")
codons = {}
for m in eachmatch(r"([AUGC]{3,3})\s([A-Z])", file)
codon, aa = m.capture
codons[codon] = aa
end