有效地将Dict转换为Julia中的NamedTuple

问题描述 投票:1回答:1

我希望有一个接受DictNamedTuple作为输入,但始终将输入转换为NamedTuple的接口。

给出Dict

julia> dd = Dict(:a => 1, :b => 2)
Dict{Symbol,Int64} with 2 entries:
  :a => 1
  :b => 2

我可以用]将其隐藏到NamedTuple中>

julia> (; dd...)
(a = 1, b = 2)

但是,这两者都分配了惊人的数量(对我来说)

julia> using BenchmarkTools

julia> @btime (; $dd...);
  1.033 μs (12 allocations: 896 bytes)

并且它不适用于嵌套的Dict,我想将其转换为嵌套的NamedTuple

julia> dd_nested = Dict(:a => 1, :b => Dict(:x => 3, :y => 4))
Dict{Symbol,Any} with 2 entries:
  :a => 1
  :b => Dict(:y=>4,:x=>3)

julia> (; dd_nested...)
(a = 1, b = Dict(:y => 4,:x => 3))

所需的输出等于

julia> (a = 1, b = (x = 3, y = 4))
(a = 1, b = (x = 3, y = 4))

我希望有一个接受Dict或NamedTuple作为输入的接口,但总是将输入转换为NamedTuple。给定Dict julia> dd = Dict(:a => 1,:b => 2)Dict {...

julia
1个回答
0
投票

关于:

© www.soinside.com 2019 - 2024. All rights reserved.