Группировать список словаря как список списка словаря на основе нескольких ключей - PullRequest
0 голосов
/ 31 декабря 2018

Как сгруппировать список словарей как список списков словарей на основе нескольких ключевых элементов (пол и класс)?

input = [{'name':'tom','roll_no':1234,'gender':'male','class':1},
      {'name':'sam','roll_no':1212,'gender':'male','class':1},
      {'name':'kavi','roll_no':1235,'gender':'female','class':2},
      {'name':'maha','roll_no':1211,'gender':'female','class':2}]

expected_output =[[
          {'name':'tom','roll_no':1234,'gender':'male','class':1},
          {'name':'sam','roll_no':1212,'gender':'male','class':1}], 
       [{'name':'kavi','roll_no':1235,'gender':'female','class':2},
      {'name':'maha','roll_no':1211,'gender':'female','class':2}]

1 Ответ

0 голосов
/ 31 декабря 2018
import itertools
from itertools import groupby
lst=[{'name':'tom','roll_no':1234,'gender':'male','class':1},
     {'name':'sam','roll_no':1212,'gender':'male','class':1},
     {'name':'kavi','roll_no':1235,'gender':'female','class':2},
     {'name':'maha','roll_no':1211,'gender':'female','class':2}]
keyfunc = key=lambda x:(x['class'],x['gender'])
final_lst = [list(grp) for key, grp in itertools.groupby(sorted(lst, key=keyfunc),key=keyfunc)]
print(final_lst)

Выход

[[{'name': 'tom', 'class': 1, 'roll_no': 1234, 'gender': 'male'}, {'name': 'sam', 'class': 1, 'roll_no': 1212, 'gender': 'male'}], [{'name': 'kavi', 'class': 2, 'roll_no': 1235, 'gender': 'female'}, {'name': 'maha', 'class': 2, 'roll_no': 1211, 'gender': 'female'}]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...