如何通过某个键值将字典列表分组为字典子列表?
如何根据字典中的某个键值,把一组字典分成多个子列表?
比如,我想把这个字典列表变成多个字典的子列表:
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}]]
我尝试过以下方法,但没有成功,因为我不太确定如何将 groupby 或 sorted 应用到字典上。
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'))]
1 个回答
3
我觉得你现在代码的问题在于你调用 itemgetter
的方式。你传入的参数应该是用来访问对象的键,而不是放在一个容器里。你现在传的是一个列表,这样是不合法的字典键。试试这个:
keyfunc = operator.itemgetter("ID")
Desired_List = [list(grp) for key, grp in itertools.groupby(sorted(lst, key=keyfunc),
key=keyfunc)]