Python: как выбрать n количество элементов каждого типа из OrderedDict?

У меня есть сериализатор Django, возвращающий OrderedDict из serializer.data. Он может содержать, например, такой тип данных:

[OrderedDict([('id', '1'), ('date', '2022-01-08'), ('type', 'A')]), OrderedDict([('id', '2'), ('date', '2022-01-09'), ('type', 'A')]), OrderedDict([('id', '3'), ('date', '2022-01-08'), ('type', 'B')]), OrderedDict([('id', '4'), ('date', '2022-01-09'), ('type', 'B')]),
OrderedDict([('id', '5'), ('date', '2022-01-08'), ('type', 'C')]), OrderedDict([('id', '6'), ('date', '2022-01-09'), ('type', 'C')])]

Я хотел бы взять первый элемент каждого type и сделать из этих данных json. Я мог бы использовать for -loops для итерации по dict и создания нового списка, содержащего по одному элементу каждого типа: A, B и C. Я хотел бы знать, есть ли какой-то более чистый и аккуратный способ просмотреть dict и выбрать n чисел из каждого type?

Вы можете использовать islice с генератором против этого списка:

from collections import OrderedDict 
import itertools as it 

odl=[OrderedDict([('id', '1'), ('date', '2022-01-08'), ('type', 'A')]), OrderedDict([('id', '2'), ('date', '2022-01-09'), ('type', 'A')]), OrderedDict([('id', '3'), ('date', '2022-01-08'), ('type', 'B')]), OrderedDict([('id', '4'), ('date', '2022-01-09'), ('type', 'B')]),
OrderedDict([('id', '5'), ('date', '2022-01-08'), ('type', 'C')]), OrderedDict([('id', '6'), ('date', '2022-01-09'), ('type', 'C')])]

n=3

>>> list(it.islice((t for od in odl for t in od.items() if t[0]=='type'),0,n))
[('type', 'A'), ('type', 'A'), ('type', 'B')]
Вернуться на верх