[英]Nonsensical MethodError in nested dict?
在将程序从python转换为julia时,我偶然发现了此错误,无法解决这个问题。 这是代码段的简化:
a = Dict()
for x in 1:3
a[x] = Dict((x,) => 1//1) #the keys of the nested dicts must all be tuples
println("Insert numbers for "$(x)": ")
for y in 1:3
while !(haskey(a[x],(y,)))
print("$((y,)): ")
a[x][y] = rationalize(convert(Float64,eval(parse(readline(STDIN)))))
end
end
end
当我运行它时,我得到:
ERROR: MethodError: `convert` has no method matching convert(::Type{Tuple{Int64}}, ::Int64)
这对我来说似乎是荒谬的,因为我没有将int转换为元组,而是将Numeric转换为Rational,然后将其分配给恰好是元组的键。 这种行为的原因是什么?
尝试将y
( Int64
)转换为元组类型时发生错误。
您可以将其更改为(y,)
:
a[x][(y,)] = rationalize(convert(Float64,eval(parse(readline(STDIN)))))
更改此行后,执行将为我提供以下输出:
Insert numbers for 1:
(2,): 2.3
(3,): 4//5
Insert numbers for 2:
(1,): 9/7
(3,): 3.141592653
Insert numbers for 3:
(1,): 3.33333
(2,): 2
并在代码末尾添加dump(a)
,输出:
Dict{Any,Any} len 3
2: Dict{Tuple{Int64},Rational{Int64}} len 3
(3,): Rational{Int64}
num: Int64 199345706
den: Int64 63453709
(2,): Rational{Int64}
num: Int64 1
den: Int64 1
(1,): Rational{Int64}
num: Int64 9
den: Int64 7
3: Dict{Tuple{Int64},Rational{Int64}} len 3
(3,): Rational{Int64}
num: Int64 1
den: Int64 1
(2,): Rational{Int64}
num: Int64 2
den: Int64 1
(1,): Rational{Int64}
num: Int64 333333
den: Int64 100000
1: Dict{Tuple{Int64},Rational{Int64}} len 3
(3,): Rational{Int64}
num: Int64 4
den: Int64 5
(2,): Rational{Int64}
num: Int64 23
den: Int64 10
(1,): Rational{Int64}
num: Int64 1
den: Int64 1
还有一件事是第一个println
。 也许应该是:
println("Insert numbers for $(x): ")
使用Julia版本0.4.3测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.