如何在clojure中将hashmap列表转换为一个hasmap



我有一个列表,如下所示:

({:course 2, :mark 9} {:course 5, :mark 8} {:course 6, :mark 10})

我想把它转换成哈希图:

{:2 9 :5 8 :6 10}

List是从mysql数据库创建的,我不知道我能不能从数据库中获得其他格式的数据,这将更容易转换为一个hashmap,我使用了java.jdbc查询函数。

有人能帮我吗?

(fn [data] (into {} (map (juxt :course :mark) data)))

在上

(list {:course 2, :mark 9} {:course 5, :mark 8} {:course 6, :mark 10})

产生

{2 9, 5 8, 6 10}

keyword函数不接受数字作为参数,所以我认为您无法得到您想要的结果。但不管怎样,数字和关键字一样都是很好的关键字。


错了!正如其他人已经证明的那样,Clojure接受数字字符串作为关键字。我们可以调整以上内容来使用这样的:

(fn [data] (into {} (map (juxt (comp keyword str :course) :mark) data)))

在上

(list {:course 2, :mark 9} {:course 5, :mark 8} {:course 6, :mark 10})

产生

{:2 9, :5 8, :6 10}

但是,正如我所说,我认为这是不必要的风险。为什么不把数字当作钥匙呢?


进一步使用数字(字符串)作为关键字:

关于符号的读者文档说

  • 符号以非数字字符开头
  • 关键字就像符号,除了:。。。(进一步限制)

另一个变体。(如果你有很多数据,可能比Thumbnail的效率低。)

(zipmap (map (comp keyword str :course)  data)
        (map :mark data))

其中CCD_ 2是问题中指定的格式。

最新更新