Как я могу проверить, есть ли в словаре ключ в Джулии? - PullRequest
5 голосов
/ 30 сентября 2019

Предположим, у меня есть объект Dict и значение ключа, и я хочу посмотреть, есть ли уже запись в словаре для этого ключа? Как мне это сделать?

1 Ответ

10 голосов
/ 30 сентября 2019

Есть несколько способов сделать это. Предположим, что это ваш словарь:

d = Dict(
    "aardvark" => 1,
    "bear"     => 2,
    "cat"      => 3,
    "dog"      => 4,
)

Если у вас есть ключ, вы можете проверить его наличие с помощью функции haskey:

julia> haskey(d, "cat")
true

julia> haskey(d, "zebra")
false

Несколько более причудливый способ проверить это:проверить, находится ли ключ в наборе ключей, возвращаемых путем вызова keys(d):

julia> ks = keys(d)
Base.KeySet for a Dict{String,Int64} with 4 entries. Keys:
  "aardvark"
  "bear"
  "cat"
  "dog"

julia> "cat" in ks
true

julia> "zebra" in ks
false

Наконец, довольно часто вы хотите получить значение, связанное с ключом, если оно присутствует в словаре,Вы можете сделать это как отдельный шаг, выполнив d[k] после проверки, что k присутствует в keys(d), но это требует дополнительного поиска в словаре. Вместо этого, если есть какое-то значение часового, которое, как вы знаете, не может быть значением в вашем словаре, например nothing, вы можете использовать функцию get для поиска ключа со значением по умолчанию:

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

Если вы ничего не знаете о типах значений, с которыми d может сопоставить ключи, это небезопасный вариант, поскольку в этом случае пара k => nothing присутствует в d.

...