用 Julia 遍历一个类JSON嵌套字典的结构。

4

我想知道是否有一种高效的(“规范”的)方法来遍历具有类似JSON结构的字典。例如,我有一个字典,其中包含一个字典数组,有时这些字典没有相同的键。然后,我需要迭代这些字典并检查特定键是否具有某个值。例如:

for cell in cells
  if cell["key1"]["key2"]["key3"] == true
     # do stuff
  end
end

问题在于有时候单元格中没有 "key1",或者 "key2" 或者 "key3",因此简单的 get(cell, key1, false) 方法不起作用。当然,我可以写很多 if 语句来解决这个问题,但我想知道是否有更聪明和更直接的方法。

1个回答

4

定义自己的运算符!

▷(d::Dict{K,V}, k::K2) where {K, V, K2<:K} = get(d, k, nothing)
▷(d::Dict{K,V}, k::Symbol) where {K, V} = get(d, k, d ▷ string(k))
▷(::Nothing, k::K2) where K2 = nothing

在我的代码中,Symbol 版本是为了方便起见。

现在让我们进行设置:

cellA = Dict("key1"=>Dict("key2"=>Dict("key3"=>true)))
cellBad = Dict("key1"=>Dict("keyBad"=>Dict("key3"=>true)))

让我们使用这个新的 API:

julia> cellA ▷ :key1:key2:key3
true

julia> cellA ▷ :key1:key2:key3  == true
true

julia> cellBad ▷ :key1:key2:key3

julia> cellBad ▷ :key1:key2:key3 == true
false

查看可用操作符及其优先级列表,请访问用户定义的中缀操作符


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接