gpt4 book ai didi

dictionary - 如何在 Dict of Dicts 上使用 Julia map ?

转载 作者:行者123 更新时间:2023-12-04 23:50:23 26 4
gpt4 key购买 nike

我想遍历一组 dicts 并评估一次接受一个 dict 的函数。在 R 语言中,我有一个列表列表,并希望为每个子列表使用我的函数 - 将列表作为输入:

function dfun(d::Dict)
println(collect(keys(d)))
println(collect(values(d)))
end

# my dict of dicts
d = [1 => ["a" => 1.1], 2 => ["b" => 3.12]]
[2=>["b"=>3.12],1=>["a"=>1.1]]

# works?
julia> dfun(d[1])
ASCIIString["a"]
[1.1]

# maps?
map(dfun,d)
ERROR: no method dfun((Int64,Dict{ASCIIString,Float64}))
in map at abstractarray.jl:1183

这样做的正确方法是什么?我很惊讶它发送 (Int64,Dict{ASCIIString,Float64}) 到函数而不仅仅是 Dict{ASCIIString,Float64}

(抱歉交叉发布 - 但我认为 SO 更适合搜索......)

最佳答案

在 Julia 中,对字典的迭代是对键/值对的迭代,而不是对值的迭代(或对键的迭代,如在 Python 中):

julia> for x in d println(x); println(typeof(x)) end
(2,["b"=>3.12])
(Int64,Dict{ASCIIString,Float64})
(1,["a"=>1.1])
(Int64,Dict{ASCIIString,Float64})

所以这就是为什么你的 map 得到 (Int64,Dict{ASCIIString,Float64}) - 类型参数。如果你想要这些值,你可以特别要求:
julia> map(dfun, values(d))
ASCIIString["b"]
[3.12]
ASCIIString["a"]
[1.1]
2-element Array{Any,1}:
nothing
nothing

但是如果你没有从函数中返回任何东西,使用 map 感觉有点奇怪因为你正在构建一个不需要的数组。我只想做
julia> for v=values(d) dfun(v) end
ASCIIString["b"]
[3.12]
ASCIIString["a"]
[1.1]

关于dictionary - 如何在 Dict of Dicts 上使用 Julia map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23998269/

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