Create dictionary from lists of keys and multiple values

python

Solution

For such tasks I prefer functional approach.

Here is a recipe for grouper:

def grouper(n, iterable, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

By using it, we may advance trough `detail` by groups of `2`:

>>> groups = grouper(len(header),detail)
>>> list(groups)
[('Joe', 22), ('Dave', 43), ('Herb', 32)]

And then we can use this iterator to create dictionaries as you need:

>>> [dict(zip(header,group)) for group in groups]
[{'Age': 22, 'Name': 'Joe'}, {'Age': 43, 'Name': 'Dave'}, {'Age': 32, 'Name': 'Herb'}]

To clarify, `zip(header,group)` gives this:

>>> zip(["Name", "Age"],('Joe', 22))
[('Name', 'Joe'), ('Age', 22)]

And summoning `dict` constructor gives this:

>>> dict([('Name', 'Joe'), ('Age', 22)])
{'Age': 22, 'Name': 'Joe'}

Problem

I have two lists: ``` header = ["Name", "Age"] detail = ["Joe", 22, "Dave", 43, "Herb", 32] ``` And would like to create a list of dictonaries like this: ``` [{"Name": "Joe", "Age": 22}, {"Name": "Dave", "Age": 32}, {"Name": "Herb", "Age": 32}] ``` This method zip gets me partially there, but only adds the first set of values to the dictionary: ``` >>> dict(zip(header, detail)) {'Age': 22, 'Name': 'Joe'} ``` How can I output as one dictionary for all values in the `detail` list? I found this answer, but this depends on `detail` containing nested lists.

Original source