Question: I got two vectors, `[shoes milk shoes]` and `[1 3 1]`, and the map I want to get is `{shoes 2, milk 3}`. I tried to `zipmap` two vectors and only `{shoes 1 milk 3}` shows. Without loop and iterate, is there another way to do that?

Answer: 
you can also employ a bit different solution for that, generating one-entry maps for item-to-amount pair, and then merging them with `+`: 

```
(let [goods '[shoes milk shoes]
      amounts [1 3 1]]
  (apply merge-with + (map hash-map goods amounts)))

;;=> {milk 3, shoes 2}

```
You can do that with a `reduce`: 

* build up tuples of key/value from your two lists
* accumulate into a map: add the value to the value for the key in the map (or start from 0 if missing (nil is passed))

```clj
(let [v1 '[shoes milk shoes]              
      v2 [1 3 1]] 
  (reduce                                                                 
    (fn [m [k v]]                                                   
      (update m k (fnil + 0) v))                        
    {}                     
    (map vector v1 v2)))
; → {shoes 2, milk 3}                                                                                                                                                                     

```