Data structures 如何在Julia中检查字典中是否有键?

Data structures 如何在Julia中检查字典中是否有键?,data-structures,julia,Data Structures,Julia,假设我有一个Dict对象和一个键值,我想看看字典中是否已经有该键值的条目?如何做到这一点?有几种方法可以做到这一点。假设这是你的字典: d = Dict( "aardvark" => 1, "bear" => 2, "cat" => 3, "dog" => 4, ) 如果您有钥匙,可以使用haskey功能检查钥匙是否存在: julia> haskey(d, "cat") true julia> h

假设我有一个
Dict
对象和一个键值,我想看看字典中是否已经有该键值的条目?如何做到这一点?

有几种方法可以做到这一点。假设这是你的字典:

d = Dict(
    "aardvark" => 1,
    "bear"     => 2,
    "cat"      => 3,
    "dog"      => 4,
)
如果您有钥匙,可以使用
haskey
功能检查钥匙是否存在:

julia> haskey(d, "cat")
true

julia> haskey(d, "zebra")
false
检查这一点有点奇怪的方法是检查键是否在通过调用
keys(d)
返回的一组键中:

最后,如果一个键存在于字典中,则很常见的情况是,您希望获取与该键相关联的值。您可以在检查
keys(d)
中是否存在
k
后,通过执行
d[k]
来作为一个单独的步骤来执行此操作,但这需要额外的字典查找。相反,如果您知道某个sentinel值不能作为字典中的值,例如
nothing
,则可以使用
get
函数查找具有默认值的键:

v = get(d, k, nothing)
if v !== nothing
    # keys(d) contains k
end

如果您对
d
可以将键映射到的值类型一无所知,那么这不是一个安全的选项,因为可能是
k=>对
d

中不存在任何值,这是其中一个更快还是所有值都具有相同的复杂性?我假设最后一个更慢,因为它有一个额外的步骤,但我不会打赌…应该都是一样的。但是检查一个密钥然后单独获取它比执行
get(d,k,nothing)
nothing
要慢。
v = get(d, k, nothing)
if v !== nothing
    # keys(d) contains k
end