2014-05-11 2 views
1

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

Например, я хотел бы изменить этот список словарей в подсписки словарей

lst = [{'A':12,'B':32,'ID':333},{'Z':32,'C':43,'ID':111},{'D':43,'J':31,'ID':222},{'a':32,'b':31,'ID':222},{'D':43,'ID':333},{'a':89,'d':31,'ID':222},{'C':83,'ID':111}] 


Desired_lst = [[{'A':12,'B':32,'ID':333},{'D':43,'ID':333}],[{'Z':32,'C':43,'ID':111},{'C':83,'ID':111}],[{'D':43,'J':31,'ID':222},{'a':32,'b':31,'ID':222},{'a':89,'d':31,'ID':222}]] 

Я попытался следующий, который не работает, потому что я не знаю, как применять группировать или сортировать в словаре.

from itertools import groupby 
from operator import itemgetter 


Desired_List = [list(grp) for key, grp in itertools.groupby(sorted(lst, key=operator.itemgetter(['ID'])),key=operator.itemgetter(['ID'))] 
+0

Что, если что-нибудь, вы пробовали? Кроме того, похоже, это группировка, а не сортировка. – jonrsharpe

+0

Добавил то, что я пытался, что я знаю, работает для списка списков, но я не уверен, как применить его к списку словарей – Chris

+0

, как они сортируются? –

ответ

3

Я думаю, что проблема с текущим кодом, как вы звоните itemgetter. Аргументы должны быть ключами для доступа к объекту без какого-либо контейнера. Вы передаете список, который не является легальным словарным ключом. Попытка:

keyfunc = operator.itemgetter("ID") 
Desired_List = [list(grp) for key, grp in itertools.groupby(sorted(lst, key=keyfunc), 
                  key=keyfunc)] 
Смежные вопросы