Converting list with strings values to maps

I have this list

["description status maker_id checker_id inserted_at updated_at\r",
 "Tanker A 2 2 2021-06-10 12:19:19.000 2021-06-10 12:19:19.000\r",
 "Open A 2 2 2021-06-10 12:19:19.000 2021-06-10 12:19:19.000\r",
 "Flat A 2 2 2021-06-10 12:19:19.000 2021-06-10 12:19:19.000\r",
 "Closed A 2 2 2021-06-10 12:19:19.000 2021-06-10 12:19:19.000\r", "\f"]

I want to convert it be like this

[

 %{"description: "Tanker", status: "A" maker_id: "2" checker_id: "2" inserted_at: "2021-06-10 12:19:19.000" updated_at: "2021-06-10 12:19:19.000"},

 %{"description: "Open", status: "A" maker_id: "2" checker_id: "2" inserted_at: "2021-06-10 12:19:19.000" updated_at: "2021-06-10 12:19:19.000"},

 %{"description: "Flat", status: "A" maker_id: "2" checker_id: "2" inserted_at: "2021-06-10 12:19:19.000" updated_at: "2021-06-10 12:19:19.000"},

 %{"description: "Closed", status: "A" maker_id: "2" checker_id: "2" inserted_at: "2021-06-10 12:19:19.000" updated_at: "2021-06-10 12:19:19.000"}

 ]

This should work:

list = ["description status maker_id checker_id inserted_at updated_at\r",
 "Tanker A 2 2 2021-06-10 12:19:19.000 2021-06-10 12:19:19.000\r",
 "Open A 2 2 2021-06-10 12:19:19.000 2021-06-10 12:19:19.000\r",
 "Flat A 2 2 2021-06-10 12:19:19.000 2021-06-10 12:19:19.000\r",
 "Closed A 2 2 2021-06-10 12:19:19.000 2021-06-10 12:19:19.000\r", "\f"]

[keys | values] = Enum.map(list, &String.split/1)

values |> Enum.map(&Enum.zip(keys, &1)) |> Enum.map(&Enum.into(&1, %{}))
2 Likes

The last line can be simplified to traverse the list only once with:

Enum.map(values, &Map.new(Enum.zip(keys, &1)))
4 Likes