从 dict 初始化不可变结构

spa*_*per 2 parameters struct dictionary julia

我有一个具有默认值的不可变结构(感谢 Parameters.jl),我想从我拥有的字典(最初这些来自 JSON 文件)创建这个结构的实例。然而,虽然我知道这些字典中可能的键集,但并非每个字典都有相同的键。我正在努力弄清楚如何通过算法将这些 dict 转换为我的不可变结构的实例。我怎样才能做到这一点?

例如,我有:

@with_kw struct Mystruct
    id::String
    mass::Float64
    names::Vector{String}=Vector{String}()
    elements::Vector{String}=Vector{String}()
end
Run Code Online (Sandbox Code Playgroud)

和许多字典,每个字典都可以有不同的键。他们都会有idand mass(这就是为什么没有默认值的原因),但每个 dict 可能有也可能没有names, and elements

似乎如果我使用的是可变结构,这会很容易,因为我可以只初始化实例,然后setfield!在事后使用——但在可变结构“初始化”之前似乎没有办法做到这一点”。

相关:以编程方式将参数传递给@kwdef struct

Jun*_*ian 5

对于这个没有参数的简单结构,您可以像这样构造一个新结构:

julia> kwargs = Dict(:id=>"test", :mass=> 1.)
Dict{Symbol,Any} with 2 entries:
  :id   => "test"
  :mass => 1.0

julia> Mystruct(;kwargs...)
Mystruct
  id: String "test"
  mass: Float64 1.0
  names: Array{String}((0,))
  elements: Array{String}((0,))
Run Code Online (Sandbox Code Playgroud)