从键和值数组创建一个字典

时间:2014-09-17 17:21:30

标签: julia

我有:

keys = ["a", "b", "j"]
vals = [1, 42, 9]

我希望像:

somedic = ["a"=>1, "b"=>42, "j"=>9]

Dict{String,Int64} with 3 entries:
"j" => 9
"b" => 42
"a" => 1

但是如何?

3 个答案:

答案 0 :(得分:15)

像这样:

keys = ["a", "b", "j"]
vals = [1, 42, 9]
yourdic = Dict(zip(keys, vals))

返回的Dict将是Dict{String, Int}类型(即我系统上的Dict{String, Int64}),因为键是String的向量,而val是Int的向量第

如果您希望Dict具有较少的特定类型,例如AbstractStringReal,您可以这样做:

Dict{AbstractString, Real}(zip(keys, vals))

如果你在一个数组中有对:

dpairs = ["a", 1, "b", 42, "j", 9]

你可以这样做:

Dict(dpairs[i]=>dpairs[i+1] for i in 1:2:length(dpairs))

与上述相同的语法适用于获得较少特定类型,例如:

Dict{Any, Number}(dpairs[i]=>dpairs[i+1] for i in 1:2:length(dpairs))

答案 1 :(得分:1)

我不认识朱莉娅 - 但如果朱莉娅有zip,那么这应该有效:dict(zip(keys,vals))

(忏悔:这就是人们如何在python中做到的。)

答案 2 :(得分:0)

我认为 Julian 的方法是使用矢量化的 .=> 版本

keys = ["a", "b", "j"]
vals = [1, 42, 9]
Dict(keys .=> vals)

这相当于使用 broadcast(=>, x, y)

https://docs.julialang.org/en/v1/manual/arrays/#man-array-and-vectorized-operators-and-functions