将列表转换为Clojure中列表映射列表中的集合

Odi*_*din 6 clojure

我有一个地图列表,其中每个键与一个字符串列表相关联.

我想将这些字符串列表中的每一个转换为集合.

(def list-of-maps-of-lists '({:a ["abc"]} {:a ["abc"]} {:a ["def"]} {:x ["xyz"]} {:x ["xx"]}))
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我最好的尝试:

(flatten (map (fn [amap] (for [[k v] amap] {k (set v)})) list-of-maps-of-lists))

=> ({:a #{"abc"}} {:a #{"abc"}} {:a #{"def"}} {:x #{"xyz"}} {:x #{"xx"}})
Run Code Online (Sandbox Code Playgroud)

这个问题的惯用解决方案是什么?

Leo*_*tny 2

我更喜欢使用fmap函数解决此类问题clojure.contrib

(map (partial fmap set)
     list-of-maps-of-lists)
Run Code Online (Sandbox Code Playgroud)

更新:根据此迁移指南fmap已移至algo.generic库的clojure.algo.generic.functor命名空间。