如何通过某个键值将字典列表分组为字典子列表?

0 投票
1 回答
985 浏览
提问于 2025-04-18 06:14

如何根据字典中的某个键值,把一组字典分成多个子列表?

比如,我想把这个字典列表变成多个字典的子列表:

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)]

撰写回答