Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dictionary 如何使用朱莉娅地图上的一个Dict的Dict?_Dictionary_Julia - Fatal编程技术网

Dictionary 如何使用朱莉娅地图上的一个Dict的Dict?

Dictionary 如何使用朱莉娅地图上的一个Dict的Dict?,dictionary,julia,Dictionary,Julia,我想迭代一个Dict集合,并计算一个每次使用一个Dict的函数。在R-speak中,我有一个列表列表,并希望为每个子列表使用我的函数,该函数将列表作为输入: 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=&g

我想迭代一个Dict集合,并计算一个每次使用一个Dict的函数。在R-speak中,我有一个列表列表,并希望为每个子列表使用我的函数,该函数将列表作为输入:

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{ascistring,Float64})发送到函数,而不仅仅是Dict{ascistring,Float64}


(很抱歉交叉发帖-但我认为这样搜索会更好…

在邮件列表上找到了答案:

map(dfun,values(d))

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

这就是为什么你的地图会得到
(Int64,Dict{ascistring,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]

哈,这是一个很好的观点。我使用
map
的唯一原因是,我想让它与
pmap
保持一致(如果我在集群中,我会调用相同的函数)。但是我想我可以用
@parallel来表示
?我读到:Julia的pmap是为每个函数调用都要做大量工作的情况而设计的。这就是我的情况-因此
pmap
。有什么想法吗?
map
和not-
map
(和
pmap
相同)是关于构建一个返回值数组是否有意义。如果是(即使返回值比较枯燥,比如你期望的一系列成功布尔值基本上都是真的),那么使用
map
。如果不是,那么你最好避免。
julia> for v=values(d) dfun(v) end
ASCIIString["b"]
[3.12]
ASCIIString["a"]
[1.1]