vipin
vipin

Reputation: 678

how to merge values of python dict in a list of dictionaries

i have a python list of dictionary as shown below:

mylist = [{'id':1,'value':4},{'id':1,'value':6},{'id':2,'value':6},{'id':3,'value':9},{'id':3,'value':56},{'id':3,'value':67},]

i am trying to create a new list of dictionaries like this by doing some operations on the above shown list of dictionaries

newlist = [{'id':1,'value':[4,6]},{'id':2,'value':[6]},{'id':3,'value':[9,56,67]}]

Does anyone know a good way to do this?

Upvotes: 0

Views: 90

Answers (3)

kohjakob
kohjakob

Reputation: 788

You could also use dict comprehension:

newlist = {key: [entries[key] for entries in diclist] for key, value in diclist[0].items()}

Upvotes: 0

thefourtheye
thefourtheye

Reputation: 239443

You can construct the entire the list of dictionaries as a single dictionary with multiple values, using defaultdict, like this

from collections import defaultdict
d = defaultdict(list)
for item in mylist:
    d[item['id']].append(item['value'])

And then using list comprehension, you can reconstruct the required list of dictionaries like this

print[{'id': key, 'value': d[key]} for key in d]
# [{'id':1, 'value':[4, 6]}, {'id':2, 'value':[6]}, {'id':3, 'value':[9,56,67]}]

Upvotes: 1

falsetru
falsetru

Reputation: 368954

If list items are sorted by id, you can use itertools.groupby:

>>> mylist = [{'id':1,'value':4},{'id':1,'value':6},{'id':2,'value':6},{'id':3,'value':9},{'id':3,'value':56},{'id':3,'v    alue':67},]
>>> import itertools
>>> [{'id': key, 'value': [x['value'] for x in grp]}
...  for key, grp in itertools.groupby(mylist, key=lambda d: d['id'])]
[{'id': 1, 'value': [4, 6]},
 {'id': 2, 'value': [6]},
 {'id': 3, 'value': [9, 56, 67]}]

Upvotes: 2

Related Questions