Найти - Пользователи
Полная версия: Группировка списка словарей по значению
Начало » Python для новичков » Группировка списка словарей по значению
1
martin
Есть начальный список:
[
  {'group_id' : 1, 'name' : 'aaa', 'age' : 111},
  {'group_id' : 1, 'name' : 'bbb', 'age' : 222},
  {'group_id' : 2, 'name' : 'ccc', 'age' : 333},
  {'group_id' : 2, 'name' : 'ddd', 'age' : 444},
  {'group_id' : 3, 'name' : 'eee', 'age' : 555},
  {'group_id' : 3, 'name' : 'fff', 'age' : 666},
]
Как его сгруппировать по group_id чтобы получилось примерно следующее:

[
  {'group_id': 1, 'data' : [{'name' : 'aaa', 'age' : 111}, {'name' : 'bbb', 'age' : 222}]}, 
  {'group_id': 2, 'data' : [{'name' : 'ccc', 'age' : 333}, {'name' : 'ddd', 'age' : 444}]}, 
  {'group_id': 3, 'data' : [{'name' : 'eee', 'age' : 555}, {'name' : 'fff', 'age' : 666}]}, 
]

s0rg
#-*- coding: utf8 -*-
import itertools
import operator
INPUT=[
  {'group_id' : 1, 'name' : 'aaa', 'age' : 111},
  {'group_id' : 1, 'name' : 'bbb', 'age' : 222},
  {'group_id' : 2, 'name' : 'ccc', 'age' : 333},
  {'group_id' : 2, 'name' : 'ddd', 'age' : 444},
  {'group_id' : 3, 'name' : 'eee', 'age' : 555},
  {'group_id' : 3, 'name' : 'fff', 'age' : 666},
]
def groupid_drop(d):
    del d['group_id']
    return d
RESULT=[{'group_id': i, 'data': map(groupid_drop, grp)} for i, grp in itertools.groupby(INPUT, operator.itemgetter('group_id'))]
print RESULT
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB