遍历Julia-lang的嵌套Dict

时间:2014-02-21 05:46:53

标签: dictionary traversal julia

当我在Julia中遍历嵌套的Dict时,它会出现此错误:

ERROR: access to undefined reference
 in next at dict.jl:567

以下是您可以重现此错误的代码:

a = [0,19620,7291,32633,9,32513,42455,10045,31964,42455,11767,54]
b = [14318,16405,19,18913,19,8141,18958,12336,7,16588,17358,30]
d = Dict()
for aa in a
   for bb in b
     if ! haskey(d,aa)
        d[aa]=Dict()
     end
     d[aa][bb] = 0.5
   end
end 
for k1 in keys(d)
   s =0.0               
   for k2 in keys(d[k1])
     s+= d[k1][k2]
   end
   for k2 in keys(d[k1])
     d[k1][k2] = d[k1][k2] / s
   end
end

有线,如果a = [0,1] b = [0,1],它可以正常工作。

---- -----更新

实际上,只要数组b有11个不同的元素,就会发生错误。 另外,如果

d[k1][k2] = d[k1][k2] / s

成为

d[k1][k2] = d[k1][k2] * s

或任何其他操作,错误消失。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

此问题现已在开发分支中得到修复,并且一旦发布,就会在预发布版本中提供。

请参阅:https://github.com/JuliaLang/julia/pull/5894/files

答案 1 :(得分:2)

错误可能来自于您在迭代时修改d[k1]的内容,因此在修改内容后密钥迭代器失败。 (为什么它只在某些操作中发生,我不能说。)

无论如何,可以通过将有问题的循环更改为

来修复它
for k2 in collect(keys(d[k1]))
    d[k1][k2] = d[k1][k2] / s
end

(我不确定这是最好的方法。)