This worked for all of the ways the data was accessed, until someone asked for a list of all people and all languages.
I needed a function that grabbed all the values nested to a point in the map (grabbing only the values instead of the deepest map wouldn't have provided valuable information). I created the following function that should grab all the values up to the nesting level specified.
(defn nth-vals* [a i m] (if (and (map? m) (> i 0)) (reduce into a (map (fn [v] (nth-vals* a (dec i) v)) (vals m))) (conj a m)))
(defn nth-vals [i m] (if (nil? m) {} (nth-vals* [] i m)))
The nth-vals function can be used as the following example shows. (assuming the same map for my-data) (formatted)