The way html forms encode data doesn‘t support lists of non-scalar data like things with multiple fields. One needs to index subfields to be able to reconstruct which fields belong together. That‘s why you get a map, not a list.
To not need to deal the limitations of html (as much) I‘d strongly suggest to not touch parameters before they‘ve been through ecto changeset validation. Ecto will handle the input being a map just fine if the schema/field is meant to be a list of things.