首页 > 解决方案 > 在 julia 中将字典导出到 CSV 文件?

问题描述

我想知道,如何将嵌套dictionary直接导出到CSV fileJulia 中?

例如:我有以下字典->

d = Dict(:a => Dict(:val1 => rand(4), :val2 => rand(450)),
    :b => Dict(:val1 => rand(4), :val2 => rand(1500)));

问题是以下内容的大小不规则,因此难以转换为数据帧。导出此类不规则词典是否有任何直接替代方法。

谢谢!

标签: csvdictionaryjuliaexport-to-csv

解决方案


您可以将嵌套键更改为 CSV 文件的列,但这会浪费磁盘空间和内存,因为您随后会在每一行中重复所有键,每个底层数据只有一行:

using DataFrames

const d = Dict(:a => Dict(:val1 => rand(4), :val2 => rand(450)),
    :b => Dict(:val1 => rand(4), :val2 => rand(1500)));
   
const alen, blen = 4 + 450, 4 + 1500
    
df = DataFrame(
    letters = vcat(fill(:a, alen), fill(:b, blen)),
    vals = vcat(fill(:val1, 4), fill(:val2, 450),
         fill(:val1, 4), fill(:val2, 1500)),
    rands = vcat(values(d[:a][:val1]), values(d[:a][:val2]),
         values(d[:b][:val1]), values(d[:b][:val2]))
)

@show filter(r -> r.letters == :a && r.vals == :val1, df)

CSV.write(pathname, df)

这在您的示例中为每个随机值使用了几个额外的字节,因为每一行都有冗余条目,例如a,val1,. 因此,出于空间原因,JLD2 会更好,除非您将 CSV 提供给需要该格式的程序。


推荐阅读