import itertools
employees =[
{
'id': '101',
'name': 'joen',
'email': 'joen@abc.com',
'role': 'Owner',
},
{
'id': '101',
'name': 'joen',
'email': 'joen@abc.com',
'role': 'Manger'
},
{
'id': '101',
'name': 'joen',
'email': 'joen@abc.com',
'role': '',
},
{
'id': '101',
'name': 'joen',
'email': 'joen@abc.com',
'role': '',
},
{
'id': '103',
'name': 'test',
'email': 't@estabc.com',
'role': 'Manger' }
]
# Key function: e stands for employee
key_func = lambda e: {'id': e['id'], 'name': e['name'], 'email': e['email']}
aggregated_roles = []
for key, group in itertools.groupby(employees, key_func):
aggregated = list(group)
# print(key, "aggregates:", aggregated)
merged_employee = key
merged_employee['role'] = [e['role'] for e in aggregated] # list-comprehension to extract the role of each element (map) and collect as list (reduce)
aggregated_roles.append(merged_employee)
print(aggregated_roles)