Dictionary 朱莉娅·朗中的遍历嵌套Dict

Dictionary 朱莉娅·朗中的遍历嵌套Dict,dictionary,traversal,julia,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

当我遍历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
或任何其他操作,错误将消失


有什么想法吗?

错误可能来自这样一个事实,即您在迭代过程中修改了
d[k1]
的内容,因此在您修改内容后,密钥迭代器将失败。(我不能说为什么它只发生在某些操作中。)

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

for k2 in collect(keys(d[k1]))
    d[k1][k2] = d[k1][k2] / s
end

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

这个问题现在已经在开发部门得到了解决,并将在预发行版中更新后立即提供


请参阅:

另外,如果数组b只有10个元素,则没有错误。在这种情况下,我仍然在迭代时更改了值。然而,我只是更改了值,而不是dict的结构,所以迭代器应该不会有问题。