Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Группировка списка словарей по значению, помогите сгруппировать список 
:(
    Опции темы
martin88
Дата 29.3.2012, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 29.3.2012

Репутация: нет
Всего: нет



Есть начальный список: 

Код

[
  {'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}]}, 
]


PM MAIL   Вверх
Backward
Дата 30.3.2012, 03:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.6.2007

Репутация: 2
Всего: 2



Код

import pprint
from itertools import groupby
from operator import itemgetter

DATA = [{'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},
]

if "__main__" == __name__:
    result = []
    for key, group in groupby(sorted(DATA, key=itemgetter("group_id")),
            key=itemgetter("group_id")):
        result.append({"group_id": key,
                "data": [{k: v for k,v in dictionary.items() if k != "group_id"} \
                        for dictionary in group]})
    pprint.pprint(result)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.