Довольно сложно понять, что вам действительно нужно.В любом случае попробуйте взглянуть на следующий код, который использует defaultdict :
category= [{'Cat':'Book','Item':'LongBook','Qty':'25'},
{'Cat':'Book','Item':'Diary','Qty':'20'},
{'Cat':'Pen','Item':'BallPoint','Qty':'30'}]
from collections import defaultdict
output = defaultdict(list)
for row in category:
output['Cat' + ':' + row['Cat']].append(row)
print output.values()
>>>[[{'Item': 'BallPoint', 'Qty': '30', 'Cat': 'Pen'}], [{'Item': 'LongBook', 'Qty': '25', 'Cat': 'Book'}, {'Item': 'Diary', 'Qty': '20', 'Cat': 'Book'}]]
Или лучше use groupby :
category= [{'Cat':'Book','Item':'LongBook','Qty':'25'},
{'Cat':'Book','Item':'Diary','Qty':'20'},
{'Cat':'Pen','Item':'BallPoint','Qty':'30'}]
from itertools import groupby
for key, vals in groupby(category, lambda x: x['Cat']):
print key, list(vals)
>>>Book [{'Item': 'LongBook', 'Qty': '25', 'Cat': 'Book'}, {'Item': 'Diary', 'Qty': '20', 'Cat': 'Book'}]
>>>Pen [{'Item': 'BallPoint', 'Qty': '30', 'Cat': 'Pen'}]