<pre><code>from more_itertools import bucket
from operator import itemgetter
from pprint import pprint
laptop_list = [
{"manufacturer_id": 1 , "manufacturer_name": "Lenovo", "model_number": '000000', "model_name": "Legion"},
{"manufacturer_id": 2 , "manufacturer_name": "HP", "model_number": '0101010', "model_name": "pavillion"},
{"manufacturer_id": 1 , "manufacturer_name": "Lenovo", "model_number": '999999', "model_name": "Ideapad"},
{"manufacturer_id": 2 , "manufacturer_name": "HP", "model_number": '0202020', "model_name": "Inspiron"},
{"manufacturer_id": 1 , "manufacturer_name": "Lenovo", "model_number": '999999', "model_name": "Ideapad"},
{"manufacturer_id": 2 , "manufacturer_name": "HP", "model_number": '0202020', "model_name": "Inspiron"} ]
m_id = itemgetter('manufacturer_id')
bucketed = bucket(laptop_list, m_id)
result = []
for i in bucketed:
d = {'model': []}
for j in bucketed[i]:
_d = j
for k, v in sorted(j.items())[:2]:
d[k] = v
_d.pop(k)
else:
d['model'].append(_d)
result.append(dict(sorted(d.items())))
pprint(result)
</code></pre>
<pre><code>[{'manufacturer_id': 1,
'manufacturer_name': 'Lenovo',
'model': [{'model_name': 'Legion', 'model_number': '000000'},
{'model_name': 'Ideapad', 'model_number': '999999'},
{'model_name': 'Ideapad', 'model_number': '999999'}]},
{'manufacturer_id': 2,
'manufacturer_name': 'HP',
'model': [{'model_name': 'pavillion', 'model_number': '0101010'},
{'model_name': 'Inspiron', 'model_number': '0202020'},
{'model_name': 'Inspiron', 'model_number': '0202020'}]}]
</code></pre>