Julia Struct to Dict



有人能帮帮我吗?我只是想把Struct/type转换成Julia中的Dict。

struct A
A1::Int
A2::Int
end
struct S
atrr1::String
attr2::String
attr3::Int
attr4::A
end

我需要从" "到字典

假设您有一个对象s:

julia> s = S("a","b",3,A(4,5))
S("a", "b", 3, A(4, 5))

您可以将其转换为Dict:

julia> Dict(fieldnames(S) .=> getfield.(Ref(s), fieldnames(S)))
Dict{Symbol, Any} with 4 entries:
:attr2 => "b"
:attr4 => A(4, 5)
:atrr1 => "a"
:attr3 => 3

注意Dicts具有非固定排序。如果您需要保持相同的字段顺序,您可以使用OrderedCollections中的OrderedDict

您也可以使用推导式(这实际上看起来快30%):

julia> Dict(key=>getfield(s, key) for key ∈ fieldnames(S))
Dict{Symbol, Any} with 4 entries:
:attr2 => "b"
:attr4 => A(4, 5)
:atrr1 => "a"
:attr3 => 3
julia> Dict(key=>getfield(s, key) for key ∈ fieldnames(S))

如果s是s的一个实例,那么你也可以使用:

function struct_to_dict(s)
return Dict(key => getfield(s, key) for key in propertynames(s))
end

不同之处在于你不需要使用类型名s。

注意:fieldnames(typeof(s))propertynames(s)慢!

相关内容

  • 没有找到相关文章

最新更新