• Source
    1. import itertools
    2.  
    3.  
    4. employees =[
    5. {
    6. 'id': '101',
    7. 'name': 'joen',
    8. 'email': 'joen@abc.com',
    9. 'role': 'Owner',
    10.  
    11. },
    12. {
    13. 'id': '101',
    14. 'name': 'joen',
    15. 'email': 'joen@abc.com',
    16. 'role': 'Manger'
    17.  
    18. },
    19. {
    20. 'id': '101',
    21. 'name': 'joen',
    22. 'email': 'joen@abc.com',
    23. 'role': '',
    24.  
    25. },
    26. {
    27. 'id': '101',
    28. 'name': 'joen',
    29. 'email': 'joen@abc.com',
    30. 'role': '',
    31.  
    32. },
    33. {
    34. 'id': '103',
    35. 'name': 'test',
    36. 'email': 't@estabc.com',
    37. 'role': 'Manger' }
    38. ]
    39.  
    40. # Key function: e stands for employee
    41. key_func = lambda e: {'id': e['id'], 'name': e['name'], 'email': e['email']}
    42.  
    43. aggregated_roles = []
    44. for key, group in itertools.groupby(employees, key_func):
    45. aggregated = list(group)
    46. # print(key, "aggregates:", aggregated)
    47. merged_employee = key
    48. merged_employee['role'] = [e['role'] for e in aggregated] # list-comprehension to extract the role of each element (map) and collect as list (reduce)
    49. aggregated_roles.append(merged_employee)
    50. print(aggregated_roles)
    51.