   (last (first (filter (comp pred first) (zip keys vals)))))
 
 (defn filter-keys-by-val
-  "Returns a keys of map for which (pred value) returns true."
+  "Returns all keys in map for which (pred value) returns true."
   [pred map]
-  (if map
+  (when map
     (for [[key val] map :when (pred val)] key)))
 
 (defn remove-keys-by-val

  "Returns a lazy sequence of vectors of corresponding items from each collection.
   Stops when the shortest collection runs out."
  [& colls]
  (partition
   (count colls)
   (apply interleave colls)))

(defn find-with
  "Returns the val corresponding to the first key where (pred key) returns true."

  and v is the new value and returns a new nested structure. The associative structure
  can have transients in it, but if any levels do not exist, non-transient hash-maps will
  be created."
  [m [k & ks] v]
  (let [assoc (if (instance? clojure.lang.ITransientCollection m) assoc! assoc)]
    (if ks
      (assoc m k (assoc-in! (get m k) ks v))
