在Julia语言中遍历嵌套字典

4
当我在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个回答

3

2
错误可能来自于您在迭代过程中修改了d[k1]的内容,因此在修改内容后键迭代器会失败。(为什么只有某些操作会发生这种情况,我无法说。)

无论如何,可以通过将问题循环更改为以下方式来修复:

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

我不确定这是否是最佳的做法。


另外,如果数组b只有10个元素,则不会出现错误。在这种情况下,我仍然在迭代时更改了值。但是,我只是更改了值,而没有更改字典的结构,因此迭代器不应该有问题。 - Xing Shi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接