带有多值键的zipmap

时间:2013-06-16 15:21:25

标签: clojure zipmap

以下内容:

(zipmap '(:a :b :c :c) '(1  2  3  4))

逃避:{:c 4, :b 2, :a 1}

我想得到:

{:c '(3 4) :b '(2) :a '(1)}

代替。

我应该如何定义自己的zipmap,它带有两个列表并返回一个包含多个键值的地图?

1 个答案:

答案 0 :(得分:5)

这样做

(defn zippy [l1 l2]
  (apply merge-with concat (map (fn [a b]{a (list b)}) l1 l2)))
        ;;; ⇒ #'user/zippy

(zippy '(:a :b :c :c) '(1  2  3  4))
        ;;; ⇒ {:c (3 4), :b (2), :a (1)}