2 added 61 characters in body edited Apr 14 '18 at 15:51 Kuba♦ 111k1212 gold badges221221 silver badges571571 bronze badges Assuming vals has depth corresponding to dims length: Module[{i = -2} , Fold[ Function[{val, dim}, Map[AssociationThread[dim -> #] &, val, {i--}]] , vals , Reverse @ dims ] ]  <|"New York City" -> <|"Terrace house" -> <|"Two bed" -> <|"2016" -> 0., "2017" -> 633.25|>, "Three bed" -> <|"2016" -> 642.96, "2017" -> 677.34|>|>, "Apartment" -> <|"Two bed" -> <|"2016" -> 591.56, "2017" -> 632.45|>, "Three bed" -> <|"2016" -> 634.9, "2017" -> 715.6|>|>|>|>  Module[{i = -2} , Fold[ Function[{val, dim}, Map[AssociationThread[dim -> #] &, val, {i--}]] , vals , Reverse @ dims ] ]  <|"New York City" -> <|"Terrace house" -> <|"Two bed" -> <|"2016" -> 0., "2017" -> 633.25|>, "Three bed" -> <|"2016" -> 642.96, "2017" -> 677.34|>|>, "Apartment" -> <|"Two bed" -> <|"2016" -> 591.56, "2017" -> 632.45|>, "Three bed" -> <|"2016" -> 634.9, "2017" -> 715.6|>|>|>|>  Assuming vals has depth corresponding to dims length: Module[{i = -2} , Fold[ Function[{val, dim}, Map[AssociationThread[dim -> #] &, val, {i--}]] , vals , Reverse @ dims ] ]  <|"New York City" -> <|"Terrace house" -> <|"Two bed" -> <|"2016" -> 0., "2017" -> 633.25|>, "Three bed" -> <|"2016" -> 642.96, "2017" -> 677.34|>|>, "Apartment" -> <|"Two bed" -> <|"2016" -> 591.56, "2017" -> 632.45|>, "Three bed" -> <|"2016" -> 634.9, "2017" -> 715.6|>|>|>|>  1 answered Apr 14 '18 at 15:41 Kuba♦ 111k1212 gold badges221221 silver badges571571 bronze badges Module[{i = -2} , Fold[ Function[{val, dim}, Map[AssociationThread[dim -> #] &, val, {i--}]] , vals , Reverse @ dims ] ]  <|"New York City" -> <|"Terrace house" -> <|"Two bed" -> <|"2016" -> 0., "2017" -> 633.25|>, "Three bed" -> <|"2016" -> 642.96, "2017" -> 677.34|>|>, "Apartment" -> <|"Two bed" -> <|"2016" -> 591.56, "2017" -> 632.45|>, "Three bed" -> <|"2016" -> 634.9, "2017" -> 715.6|>|>|>|>