【问题标题】:Export a dictionary to a CSV file in julia?在 julia 中将字典导出到 CSV 文件?
【发布时间】:2021-07-01 20:08:43
【问题描述】:

我想知道,如何将嵌套的 dictionary 直接导出到 Julia 中的 CSV file

例如:我有以下字典 ->

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

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

谢谢!

【问题讨论】:

  • 如果您正在寻找一种与语言无关的文件格式来保存嵌套字典,您可以考虑使用 JSON 或 YAML。但是,如果您只是要将这个文件读回 Julia,那么您不妨使用 JLD2.jl。

标签: csv dictionary julia export-to-csv


【解决方案1】:

您可以将嵌套键更改为 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 提供给需要该格式的程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-06
    • 2019-03-24
    • 2021-01-23
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    相关资源
    最近更新 更多