if key exists: update, otherwise: assoc
Use fnil
to handle the nil value of v
when k
doesn't exist in the map:
(update m k (fnil conj []) v)
While the fnil
answer is more spectacular, I find the following easier to read, especially if unfamiliar with fnil
:
(assoc m k (conj (m k []) v))
where (m k [])
returns the value of k
in m
or defaults to []
if k
does not exist in m
.
If k
is a symbol, (k m [])
would also work.