Clojure:将键应用于每个序列序列

时间:2015-12-24 14:40:36

标签: clojure

我是Clojure宇宙的新手,我遇到了问题。 我得到了一个看起来像这样的LazySeq(事实上更长)

values = (("Brand1" "0") ("Brand2" "15") ("Brand3" "12"))

我还将field定义为

fields = [:Brand :Sale]

我想最后至少

({:Brand "Brand1 :Sale "0"} {:Brand "Brand2 :Sale "15"} {:Brand "Brand3 :Sale "12"})

我尝试了几件事(申请,交错,减少,进入和组合)但我每次都会得到意想不到的结果。

这可能吗? 感谢

2 个答案:

答案 0 :(得分:4)

您应该使用(map (partial zipmap fields) values)

    os.system('script2.py')  
    subprocess.Popen('script2.py',     shell=true)
    os.execl(sys.executable, "python3", 'script2.py')

答案 1 :(得分:2)

你是对的:你必须interleave然后将它们全部添加到地图中。但是你应该为values中的每个集合执行此操作。这意味着您需要使用map

(let [values '(("Brand1" "0") ("Brand2" "15") ("Brand3" "12"))
      fields [:Brand :Sale]]
  (map #(apply hash-map (interleave fields %)) values))

输出:

({:Sale "0", :Brand "Brand1"} 
 {:Sale "15", :Brand "Brand2"} 
 {:Sale "12", :Brand "Brand3"})

另一种变体是这样做:

(let [values '(("Brand1" "0") ("Brand2" "15") ("Brand3" "12"))
      fields [:Brand :Sale]]
  (map #(into {} (map vector fields %)) values))