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')]