Julia:写一个函数 "paramvalues" 是 returns 一个参数值字典

Julia: Writing a function "paramvalues" that returns a dictionary of parameter values

我正在做一项经济学作业,需要在 Julia 中创建一个函数,该函数接受关键字参数并 returns 它们以字典的形式出现。到目前为止这是我的代码,但它不是 运行 因为没有匹配 getindex(::Nothing, ::Symbol) 的方法。

function paramvalues(a; Nb = 100, Ns = 100, Minval = 0, Maxval = 200, Mincost = 0, Maxcost = 200)
    d = Dict(:Nb => Nb, :Ns => Ns, :Minval => Minval, :Maxval => Maxval, :Mincost => Mincost, :Maxcost => Maxcost)
    for values in a
        d[values] = get(d, values, 0) 
    end
    d 
end

这可能更接近你想要的:

function paramvalues(a; kwargs...)
    @show kwargs
    dict = collect(kwargs)
    @show dict
    return dict
end

这里的神奇之处在于 kwargs(又名关键字参数)和 ...“SLURP”,将所有关键字参数吸收到一个变量中。

它是对数组的迭代器。要将迭代器转换为标准集合,如 ArrayDict,您可以使用 collect。对上的迭代器变成 Dict.

尝试一下我明白了:

paramvalues(123;Nb = 100, Ns = 100, Minval = 0, Maxval = 200, Mincost = 0, Maxcost = 200)
kwargs = Base.Iterators.Pairs(:Nb => 100,:Ns => 100,:Minval => 0,:Maxval => 200,:Mincost => 0,:Maxcost => 200)
dict = Pair{Symbol,Int64}[:Nb => 100, :Ns => 100, :Minval => 0, :Maxval => 200, :Mincost => 0, :Maxcost => 200]
6-element Array{Pair{Symbol,Int64},1}:
      :Nb => 100
      :Ns => 100
  :Minval => 0
  :Maxval => 200
 :Mincost => 0
 :Maxcost => 200

我不知道 a 应该是什么。

听起来您的错误是由于对存储 Nothing 的变量调用 get 而不是存储 Dict.

同样在遍历字典时,returns (key, value) 的元组对。所以用这样的东西来遍历字典:

for (k,v) in my_dict
    @show k,v
end

另外不要忘记在 julia repl 中使用 ? 并搜索其中的一些内容。像 ?Dict?for?enumerate?@show?collect.

Dict可以直接取关键字参数:

julia> f(;kw...) = Dict(kw)
f (generic function with 1 method)

julia> f(a=5, b=3)
Dict{Symbol, Int64} with 2 entries:
  :a => 5
  :b => 3