有人能帮帮我吗?我只是想把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
注意Dict
s具有非固定排序。如果您需要保持相同的字段顺序,您可以使用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)
慢!