我是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"})
我尝试了几件事(申请,交错,减少,进入和组合)但我每次都会得到意想不到的结果。
这可能吗? 感谢
答案 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))