goku
goku

Reputation: 203

convert list of lists to dictionary

how can I create a list of dictionaries with those lists

temp = [['header1', '4', '8', '16', '32', '64', '128', '256', '512', '243,6'], ['media_range', '1,200', '2,400', '4,800', '4,800', '6,200', '38,400', '76,800', '153,600', '160,000'], ['speed', '300', '600', '1,200', '2,000', '2,000', '2,000', '2,000', '2,000', '2,000']]

the headers of the dictionary is the first element of the lists

the expected Output is:

output= [{'header1': '4', 'media_range': '1,200', 'speed': '300'}, {'header1': '8', 'media_range': '2,400', 'speed': '600'}, ...]

Ideally the code should handle any amount of lists (in this case 3)

Upvotes: 3

Views: 1052

Answers (3)

Ajax1234
Ajax1234

Reputation: 71451

Slightly shorter solution with zip and unpacking:

temp = [['header1', '4', '8', '16', '32', '64', '128', '256', '512', '243,6'], ['media_range', '1,200', '2,400', '4,800', '4,800', '6,200', '38,400', '76,800', '153,600', '160,000'], ['speed', '300', '600', '1,200', '2,000', '2,000', '2,000', '2,000', '2,000', '2,000']]
header, *data = zip(*temp)
result = [dict(zip(header, i)) for i in data]

Output:

[{'header1': '4', 'media_range': '1,200', 'speed': '300'}, {'header1': '8', 'media_range': '2,400', 'speed': '600'}, {'header1': '16', 'media_range': '4,800', 'speed': '1,200'}, {'header1': '32', 'media_range': '4,800', 'speed': '2,000'}, {'header1': '64', 'media_range': '6,200', 'speed': '2,000'}, {'header1': '128', 'media_range': '38,400', 'speed': '2,000'}, {'header1': '256', 'media_range': '76,800', 'speed': '2,000'}, {'header1': '512', 'media_range': '153,600', 'speed': '2,000'}, {'header1': '243,6', 'media_range': '160,000', 'speed': '2,000'}]

Upvotes: 1

Axisnix
Axisnix

Reputation: 2907

You could use zip(). This requires you to know how many lists but does the expected output.

for header1,media_range,speed in zip(temp[0], temp[1], temp[2]):
    if header1 != "header1":
        output.append({temp[0][0]: header1, temp[1][0]: media_range, temp[2][0]: speed})

Upvotes: 0

timgeb
timgeb

Reputation: 78650

IIUC

>>> temp = [['header1', '4', '8', '16', '32', '64', '128', '256', '512', '243,6'], ['media_range', '1,200', '2,400', '4,800', '4
...: ,800', '6,200', '38,400', '76,800', '153,600', '160,000'], ['speed', '300', '600', '1,200', '2,000', '2,000', '2,000', '2,0
...: 00', '2,000', '2,000']]                                                                                                    
>>>                                                                                                                             
>>> keys = [l[0] for l in temp]                                                                                                 
>>> values = [l[1:] for l in temp]                                                                                              
>>> dicts = [dict(zip(keys, sub)) for sub in zip(*values)]                                                                                                             
>>>                                                                                                                                                                    
>>> dicts                                                                                                                                                              
[{'header1': '4', 'media_range': '1,200', 'speed': '300'},
 {'header1': '8', 'media_range': '2,400', 'speed': '600'},
 {'header1': '16', 'media_range': '4,800', 'speed': '1,200'},
 {'header1': '32', 'media_range': '4,800', 'speed': '2,000'},
 {'header1': '64', 'media_range': '6,200', 'speed': '2,000'},
 {'header1': '128', 'media_range': '38,400', 'speed': '2,000'},
 {'header1': '256', 'media_range': '76,800', 'speed': '2,000'},
 {'header1': '512', 'media_range': '153,600', 'speed': '2,000'},
 {'header1': '243,6', 'media_range': '160,000', 'speed': '2,000'}]

Upvotes: 4

Related Questions