gpt4 book ai didi

data-structures - 在 Clojure 中合并 map

转载 作者:行者123 更新时间:2023-12-03 23:36:39 24 4
gpt4 key购买 nike

我正在寻找一种方法来合并 4 个单独的 map 列表。我正在抓取一个网站,该网站以下面的 data* 形式为我提供了一个属性列表...

(def data1 '("1" "1" "1" "1"))
(def data2 '("2" "2" "2" "2"))
(def data3 '("3" "3" "3" "3"))
(def data4 '("4" "4" "4" "4"))

...我正在根据键组织它们:

(map #(assoc {} :a %) data1)
(map #(assoc {} :b %) data2)
(map #(assoc {} :c %) data3)
(map #(assoc {} :d %) data4)

上面的代码产生以下数据结构:

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

我想垂直组合这些列表,所以我有以下内容:

(def want [{:a "1", :b "2", :c "3", :d "4"}
{:a "1", :b "2", :c "3", :d "4"}
{:a "1", :b "2", :c "3", :d "4"}
{:a "1", :b "2", :c "3", :d "4"}])

这将允许我遍历 map 列表并从每张 map 中选择一个特定值,将它们显示在网页上。但我不确定如何获得我想要的数据结构。感谢任何帮助...

最佳答案

我不清楚你为什么要做中间步骤

(map #(assoc {} :a %) ...)

如果你的数据是

(def data [["1" "1" "1" "1"] 
["2" "2" "2" "2"]
["3" "3" "3" "3"]
["4" "4" "4" "4"]])

你的 key 是

(def my-keys [:a :b :c :d])

然后你就可以使用zipmap

(mapv zipmap (repeat my-keys) (apply map list data))


;=> [{:d "4", :c "3", :b "2", :a "1"}
; {:d "4", :c "3", :b "2", :a "1"}
; {:d "4", :c "3", :b "2", :a "1"}
; {:d "4", :c "3", :b "2", :a "1"}]

注意 (apply map list data) 用于将数据转换为相对于键的正确方向。

关于data-structures - 在 Clojure 中合并 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23044997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com