Dictionary Julia中的字典元素操作

Dictionary Julia中的字典元素操作,dictionary,julia,elementwise-operations,Dictionary,Julia,Elementwise Operations,我想向字典的所有值广播一个操作。对于阵列,我知道我可以使用以下方式广播元素操作: julia> b1 = [1, 2, 3] julia> b1./2 3-element Array{Float64,1}: 0.5 1.0 1.5 向字典的所有值广播相同操作的有效方法是什么?喂,为了字典 a1 = Dict("A"=>1, "B"=>2) 为字典的键和值定义了迭代协议,因此您可以只执行以下操作: julia> d = Dict("a"=>1, "b"

我想向字典的所有值广播一个操作。对于阵列,我知道我可以使用以下方式广播元素操作:

julia> b1 = [1, 2, 3]
julia> b1./2
3-element Array{Float64,1}:
 0.5
 1.0
 1.5
向字典的所有值广播相同操作的有效方法是什么?喂,为了字典

a1 = Dict("A"=>1, "B"=>2)

为字典的键和值定义了迭代协议,因此您可以只执行以下操作:

julia> d = Dict("a"=>1, "b"=>2)
Dict{String,Int64} with 2 entries:
  "b" => 2
  "a" => 1

julia> values(d).^2
2-element Array{Int64,1}:
 4
 1
如果您想修改字典,请使用
map,例如:

julia> map!(x->x^2, values(d))
Base.ValueIterator for a Dict{String,Int64} with 2 entries. Values:
  4
  1

julia> d
Dict{String,Int64} with 2 entries:
  "b" => 4
  "a" => 1
但是,函数必须输出可以转换回字典值类型的类型。在我的例子中,我对
Int
进行平方运算,得到
Int
。但是,在这个问题中,你要除以2,这显然会产生
Float64
。如果无法将浮点值转换回整数,则会出现错误

注意,您也可以通过按键进行广播,例如:

julia> f(x) = "hello mr $(x)"
f (generic function with 1 method)

julia> f.(keys(d))
2-element Array{String,1}:
 "hello mr b"
 "hello mr a"
但这不能就地完成,即您不能使用
map在按键上


重要的是,请注意,不应实例化集合。事实上,这将是低效的。因此,避免像这样的构造:
collect(values(d))./2

这会导致我想要的输出。但是,我希望新值覆盖字典中的旧值。我该怎么做?