这是一个数组:
array=["a","b",1]
我定义了一个字典
dict=Dict()
dict["a","b"]=1
我想用'array'来定义字典
dict2 = Dict()
dict2[array[1:2]]=1
但它们不一样,
julia> dict
Dict{Any,Any} with 1 entry:
("a","b") => 1
julia> dict2
Dict{Any,Any} with 1 entry:
Any["a","b"] => 1
如何使用'array'生成'dict'而不是'dict2'?感谢
答案 0 :(得分:7)
您可以在执行任务时使用splat运算符:
julia> dict = Dict()
Dict{Any,Any} with 0 entries
julia> dict[array[1:2]...] = 1
1
julia> dict
Dict{Any,Any} with 1 entry:
("a","b") => 1
注意:您可以在Dict中指定类型,这样可以防止这些类型的错误:
dict = Dict{Tuple{String, String}, Int}()
答案 1 :(得分:5)
Julia将dict["a", "b"] = 1
之类的内容解释为dict[("a", "b")] = 1
,这是一个多维键被解释为元组键。
问题出现是因为array[1:2]
的输出不是元组而是数组。您可以使用
tup = tuple(array[1:2]...)
然后你可以
dict2 = Dict()
dict2[tup] = 1
注意使用splat运算符...
解包array[1:2]
来创建一个2元素元组而不是1元素元组(其唯一元素是2元素数组)在您不使用...
时创建。
答案 2 :(得分:0)
在 Julia 1.6 中,以下代码有效:
array=["a","b",1]
tup = Tuple(array[1:2])
dict2 = Dict()
dict2[tup] = 1
julia> dict2
Dict{Any, Any} with 1 entry:
("a", "b") => 1
不再需要通过 splat 操作符