将列表转换为Clojure中列表映射列表中的集合
我有一个映射列表,其中每个键都与一个字符串列表相关联 我想将这些字符串列表转换为集合将列表转换为Clojure中列表映射列表中的集合,clojure,Clojure,我有一个映射列表,其中每个键都与一个字符串列表相关联 我想将这些字符串列表转换为集合 (def list-of-maps-of-lists '({:a ["abc"]} {:a ["abc"]} {:a ["def"]} {:x ["xyz"]} {:x ["xx"]})) 这是我迄今为止最好的尝试: (flatten (map (fn [amap] (for [[k v] amap] {k (set v)})) list-of-maps-of-lists)) => ({:a #{"a
(def list-of-maps-of-lists '({:a ["abc"]} {:a ["abc"]} {:a ["def"]} {:x ["xyz"]} {:x ["xx"]}))
这是我迄今为止最好的尝试:
(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"}})
这个问题的惯用解决方案是什么?这与您的解决方案非常相似
使用列表理解:
(map
#(into {} (for [[k v] %] [k (set v)]))
list-of-maps-of-lists)
备选方案:
(map
#(zipmap (keys %) (map set (vals %)))
list-of-maps-of-lists)
我更喜欢使用
clojure.contrib
中的函数解决此类问题:
(map (partial fmap set)
list-of-maps-of-lists)
更新:根据,
fmap
已移动到库的名称空间。另一种选择:(map#(应用合并(map(map(fn[[k v]]{k(set v)})%))列表)
和另一种:(map(部分减少kv(fn[ak v](assoc a k(set v)){})列表列表列表)
谢谢!看起来真的很有用。根据这个,它被移到了这里: