如何将带有集合的Clojure地图转换为val到seq的地图?

Mad*_*mme 2 clojure

我有一个地图,其中每个键都有一个集合作为值:

{:name ["Wut1" "Wut2"] :desc ["But1" "But2"]}
Run Code Online (Sandbox Code Playgroud)

可以假设值集合具有相同数量的元素.

如何将其转换为列表(或向量),其中每个元素都是一个映射,其中键是原始集合中的键,值是1值,如:

[{:name "Wut1" :desc "But1"} {:name "Wut2" :desc "But2"}]
Run Code Online (Sandbox Code Playgroud)

应该说,按键的数量是以前不知道的(所以我不能硬编码的:name:desc)

ama*_*loy 6

(fn [m]
  (let [ks (keys m)]
    (apply map (fn [& attrs]
                 (zipmap ks attrs))
           (vals m))))
Run Code Online (Sandbox Code Playgroud)
  1. 获取用于标记所有内容的键列表
  2. 使用apply map以"转",在列表中,列出了(vals m)从"为每个属性的值的列表,它应该有"为"为每个对象,它应该具有的属性列表".
  3. zipmap 与第一部分中提取的键一起返回.