如何从字典中删除键?

时间:2020-01-17 05:33:21

标签: julia

我想从字典中删除键/值对。

我现在正在创建新词典:

julia> dict = Dict(1 => "one", 2 => "two")
Dict{Int64,String} with 2 entries:
  2 => "two"
  1 => "one"

julia> dict = Dict(k => v for (k, v) in dict if k != 2)
Dict{Int64,String} with 1 entry:
  1 => "one"

但是我想更新现有字典。如何在Julia中执行此操作?

1 个答案:

答案 0 :(得分:7)

delete!将从字典中删除键/值对(如果键存在),并且如果键不存在则无效。它返回对字典的引用:

julia> dict = Dict(1 => "one", 2 => "two")
Dict{Int64,String} with 2 entries:
  2 => "two"
  1 => "one"

julia> delete!(dict, 1)
Dict{Int64,String} with 1 entry:
  2 => "two"

如果需要使用与键关联的值,请使用pop!。但是,如果密钥不存在,则会出错:

julia> dict = Dict(1 => "one", 2 => "two");

julia> value = pop!(dict, 2)
"two"

julia> dict
Dict{Int64,String} with 1 entry:
  1 => "one"

julia> value = pop!(dict, 2)
ERROR: KeyError: key 2 not found

您可以避免使用pop!的三个参数版本引发错误。第三个参数是在键不存在的情况下返回的默认值:

julia> dict = Dict(1 => "one", 2 => "two");

julia> value_or_default = pop!(dict, 2, nothing)
"two"

julia> dict
Dict{Int64,String} with 1 entry:
  1 => "one"

julia> value_or_default = pop!(dict, 2, nothing)

使用filter!根据某些谓词功能批量删除键值对:

julia> dict = Dict(1 => "one", 2 => "two", 3 => "three", 4 => "four");

julia> filter!(p -> iseven(p.first), dict)
Dict{Int64,String} with 2 entries:
  4 => "four"
  2 => "two"