Julia中的字典帮助 - 从文本文件创建字典

时间:2014-06-16 02:43:36

标签: dictionary julia

我试图根据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

如果我在这个循环中打印codonaa,我会得到正确的输出(所有的密码子,所有的aa')但我可以'弄清楚如何把它放入字典。如果我在循环结束时执行:codons = {codon => aa},我最终会得到一个只包含最后一个条目的字典。

我确信语法是非常明显的,但我是一名生物学家,而不是程序员,所以我对the documentation的阅读并不能让我随处可见。它说:

  

给定字典D,语法D [x]返回键x的值(如果存在)或抛出错误,并且D [x] = y存储键值对x =>在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"},循环工作并正确填写。所以一个修改过的问题:你如何启动空库?

EDIT2:最小的不工作示例:

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

1 个答案:

答案 0 :(得分:2)

总结最小工作示例(MWE),以便将您的格式化文本文件读入Julia Dict ...

file = open(readall, "rna_codons.txt")
codons = Dict()
for m in eachmatch(r"([AUGC]{3,3})\s([A-Z])", file)
    codon, aa = m.capture
    codons[codon] = aa
end

N.B。:如果文件非常大,可能会有更快的方式来生成Dict

<强> 修改

鉴于您明显的文本文件格式,这是创建Dict的另一种方法。我没有做任何测试来确定任何性能损失/收益。

condon_array = open(readdlm, "rna_codons.txt")
condons = Dict{ASCIIString,ASCIIString}(condon_array[:,1:2:end][:],condon_array[:,2:2:end][:])

N.B。:如果您使用它,请更好地检查它是否正确。