У меня есть два дикта, и я хочу вычесть совпадающие значения из двух диктов, чтобы сгенерировать третий диктов.
A = Dict("w" => 2, "x" => 3)
B = Dict("x" => 5, "w" => 7)
# Ideally I could go B .- A and get a dict like
C = Dict("w" => 5, "x" => 2)
# but I get ERROR: ArgumentError: broadcasting over dictionaries and `NamedTuple`s is reserved
Одним из уродливых решений является перегрузка оператора вычитания, но я не хочу перегружать встроенный тип, такой как dict, из-за боязни взломать другой код.
import Base.-
function -(dictA::Dict, dictB::Dict)
keys_of_A = keys(dictA)
subtractions = get.(Ref(dictB), keys_of_A, 0) .- get.(Ref(dictA), keys_of_A, 0)
return Dict(keys_of_A .=> subtractions)
end
Есть ли более чистый способ выполнения алгебраических операций при сопоставлении значений из разных диктов?