Given list of dicts:
[{'id': 1, 'name': 'Sam'}, {'id': 1, 'name': 'Bob'}, {'id': 2, 'name': 'Mark'}, {'id': 2, 'name': 'Jane'}]
Need to turn it into:
[{'id': 1, 'name': 'Sam'}, {'id': 2, 'name': 'Jane'}]
Just take any "record" unique by id. How can i do it in single line ?
>Solution :
Using itertools.groupby, it is assumed that dictionaries with the same id are arranged consecutively:
>>> lst
[{'id': 1, 'name': 'Sam'},
{'id': 1, 'name': 'Bob'},
{'id': 2, 'name': 'Mark'},
{'id': 2, 'name': 'Jane'}]
>>> from itertools import groupby
>>> from operator import itemgetter
>>> [next(mappings) for _, mappings in groupby(lst, key=itemgetter('id'))]
[{'id': 1, 'name': 'Sam'}, {'id': 2, 'name': 'Mark'}]
Or dictionary comprehension:
>>> list({mp['id']: mp for mp in lst}.values())
[{'id': 1, 'name': 'Bob'}, {'id': 2, 'name': 'Jane'}]