En Clojure, me gustaría combinar varios mapas en un solo mapa donde las asignaciones con la misma clave se combinan en una lista.En clojure, ¿cómo combinar varios mapas que combinan mapeos con la misma clave en una lista?
Por ejemplo:
{:humor :happy} {:humor :sad} {:humor :happy} {:weather :sunny}
debería conducir a:
{:weather :sunny, :humor (:happy :sad :happy)}
pensé:
(merge-with (comp flatten list) data)
pero no es eficiente porque aplanar tiene O (n) complejidad.
Entonces se me ocurrió:
(defn agg[x y] (if (coll? x) (cons y x) (list y x)))
(merge-with agg data)
Pero no se siente idiomática. ¿Alguna otra idea?
el último también causa problemas en los valores del mapa, incluidas las colecciones ... – mikera