JK7
JK7

Reputation: 125

dictionary of list to list of dictionaries

I was wondering what the best method is to make a function convert(dict_of_list) that converts a list of dictionaries to the following:

Before conversion, it is represented as: {'A': ['A1', 'A2'], 'B': ['B1', 'B2']}

After conversion, it is represented as: [{'A': 'A1', 'B': 'B1'}, {'A': 'A2', 'B': 'B2'}]

I have the following answer, but it feels like it could be done much easier

def convert(dict_of_lists):
    if len(dict_of_lists) == 0:
        return []

    keys = dict_of_lists.keys()
    nr_entries = None
    for k in keys:
        if nr_entries == None:
            nr_entries = len(dict_of_lists[k])
        if len(dict_of_lists[k]) != nr_entries:
            return None

    result = []
    for i in range(nr_entries):
        entry = dict()
        for k in keys:
            entry[k] = dict_of_lists[k][i]
        result.append(entry)
    return result

Upvotes: 1

Views: 44

Answers (1)

Ajax1234
Ajax1234

Reputation: 71451

You can use zip:

d = {'A': ['A1', 'A2'], 'B': ['B1', 'B2']}
r = [dict(i) for i in zip(*[[(a, i) for i in b] for a, b in d.items()])]

Output:

[{'A': 'A1', 'B': 'B1'}, {'A': 'A2', 'B': 'B2'}]

Upvotes: 2

Related Questions