gpt4 book ai didi

julia - 在 Julia 中有效地将 Dict 转换为 NamedTuple

转载 作者:行者123 更新时间:2023-12-01 08:10:47 25 4
gpt4 key购买 nike

我想要一个接受 Dict 的接口(interface)或 NamedTuple作为输入,但总是将输入转换为 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 s,我想将其转换为嵌套 NamedTuple s
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))

最佳答案

关于什么:

unzip(d::Dict) = (;(p.first => unzip(p.second) for p in d)...)
unzip(d) = d

sample 测试:
julia> unzip(dd)
(a = 1, b = (y = 4, x = 3))

关于内存分配 NamedTupleTools.jl似乎内存占用略小。但无论哪种情况,您都在这里创建了相当多的数据结构,因此您很可能无法以更便宜的价格做到这一点。

关于julia - 在 Julia 中有效地将 Dict 转换为 NamedTuple,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59755198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com