我有一个数组的Dict,我想将其变成一个Dicts的数组,其中每个Dict都具有数组Dict的唯一组合。理想情况下,将存在一种解决方案,该解决方案可以使用任意数量的Dict键并且以与R的expand_grid
相似的方式工作(但适用于Dicts而不是DataFrames)。在下面的示例中,我显示了一个示例字典,该数组要转换为Dicts数组。
d = Dict{String,Array{Int}}(["a", "b", "c"] .=> [[1,2,3], [4], [5,6]])
desired_result = Array{Dict{String,Int}}([Dict{String,Int}(["a", "b", "c"] .=> [1,4,5]),
Dict{String,Int}(["a", "b", "c"] .=> [1,4,6]),
Dict{String,Int}(["a", "b", "c"] .=> [2,4,5]),
Dict{String,Int}(["a", "b", "c"] .=> [2,4,6]),
Dict{String,Int}(["a", "b", "c"] .=> [3,4,5]),
Dict{String,Int}(["a", "b", "c"] .=> [3,4,6])])
当然,一种方法是将其附加到嵌套有for循环的数组中,但是如果有一种更优雅的方法也可以。
答案 0 :(得分:2)
这里是2排纸:
d= Dict{String,Array{Int}}(["a", "b", "c"] .=> [[1,2,3], [4], [5,6]]);
ks= sort(collect(keys(d)));
[Dict(ks .=> val) for val in (collect(Iterators.product(getindex.((d,),ks)...))...,)]
这将产生:
6-element Array{Dict{String,Int64},1}:
Dict("c"=>5,"b"=>4,"a"=>1)
Dict("c"=>5,"b"=>4,"a"=>2)
Dict("c"=>5,"b"=>4,"a"=>3)
Dict("c"=>6,"b"=>4,"a"=>1)
Dict("c"=>6,"b"=>4,"a"=>2)
Dict("c"=>6,"b"=>4,"a"=>3)