I am trying create a Dictionary from Arrays of Keys and Values
julia> id = [1,2,3,4];
julia> coord = [0 0 0;1 0 0;5 3 0;6 5 1];
and I want something like:
Dict(id,coord)
i.e.
julia> X = Dict(1 => [0,0,0],
2 => [1,0,0],
3 => [5,3,0],
4 => [6,5,1])
Dict{Int64,Array{Int64,1}} with 4 entries:
4 => [6, 5, 1]
2 => [1, 0, 0]
3 => [5, 3, 0]
1 => [0, 0, 0]
One way is Dict(zip(keys, values)).
Or the slick new syntax Dict(ks .=> vs) which simply falls out of broadcasting and the Dict constructor.
It would be cool if the documentation had a “cool tricks that are hard to look up in the documentation” documentation page.
Thank you so much for your help.
I don’t get an array in the values (julia v0.7)
julia> Dict(id .=> coord)
Dict{Int64,Int64} with 4 entries:
4 => 1
2 => 0
3 => 0
1 => 0
i.e.
Dict{Int64,Array{Int64,1}} with 4 entries:
4 => [6, 5, 1]
2 => [1, 0, 0]
3 => [5, 3, 0]
1 => [0, 0, 0]
You need:
julia> Dict( id .=> [coord[i,:] for i=1:4] )
Dict{Int64,Array{Int64,1}} with 4 entries:
4 => [6, 5, 1]
2 => [1, 0, 0]
3 => [5, 3, 0]
1 => [0, 0, 0]
Also, this is faster:
julia> Dict( (id[i] => coord[i,:] for i=1:4) )
Dict{Int64,Array{Int64,1}} with 4 entries:
4 => [6, 5, 1]
2 => [1, 0, 0]
3 => [5, 3, 0]
1 => [0, 0, 0]
Edit: I left two extra unnecessary parens, thanks to @StefanKarpinski, this can be much nicer:
Dict( id[i] => coord[i,:] for i=1:4 )
You can drop one pair of parens in the latter one.
Yes, this makes it much nicer, thank you.
It would have to be called “cool tricks that were hard to look up in the documentation”. 