Я бы не использовал для этого слияние,
(defn fnil [f not-found]
(fn [x y] (f (if (nil? x) not-found x) y)))
(defn conj-in [m map-entry]
(update-in m [(key map-entry)] (fnil conj #{}) (val map-entry)))
(defn merge-matches [property-map-list]
(reduce conj-in {} (apply concat property-map-list)))
user=> (merge-matches in)
{:b #{4 5 6}, :a #{1 2 3}}
fnil скоро станет частью ядра, так что вы можете игнорировать реализацию ... но он просто создает версию другой функции, которая может обрабатывать ноль аргументов. В этом случае coni будет заменять # {} на ноль.
Таким образом, сокращение соединяется с набором для каждого ключа / значения в списке предоставленных карт.