Python 将字典列表分组到具有相同属性值的字典列表

Python 将字典列表分组到具有相同属性值的字典列表,python,python-2.7,Python,Python 2.7,我有字典列表,每本字典都有属性person\u id [{'person_id': 1, 'something..': 'else'}, {'person_id': 3, 'something..': 'else'}, {'person_id': 1, 'something..': 'else'}] 如何将具有相同“person_id”的所有词典分组到列表中,并将以前的词典列表拆分到词典列表中(内部列表仅包含具有相同“person_id”的词典) 我通过简单的迭代完成了这项工作,并使用这些字典

我有字典列表,每本字典都有属性person\u id

[{'person_id': 1, 'something..': 'else'}, {'person_id': 3, 'something..': 'else'}, {'person_id': 1, 'something..': 'else'}]
如何将具有相同“person_id”的所有词典分组到列表中,并将以前的词典列表拆分到词典列表中(内部列表仅包含具有相同“person_id”的词典)


我通过简单的迭代完成了这项工作,并使用这些字典检查列表,但Python中是否有有效的方法?

您的输入没有按
个人id进行排序,因此请使用循环方法:

from collections import defaultdict

grouped = defaultdict(list)

for person in inputlist:
    grouped[person['person_id']].append(person)

grouped = grouped.values()
这会将输入列表排序为bucket,然后将所有bucket放回外部列表。如果需要按id对输出进行排序,可以使用:

grouped = [grouped['pid'] for pid in sorted(grouped)]
如果需要按排序顺序生成原始列表,或者可以按排序顺序生成原始列表,还可以使用进行分组:

from itertools import groupby
from operator import itemgetter

grouped = [list(g) for p, g in groupby(inputlist, key=itemgetter('person_id'))]

但这确实需要先对
输入列表
进行排序。

您的输入不按
人员id
排序,因此请使用循环方法:

from collections import defaultdict

grouped = defaultdict(list)

for person in inputlist:
    grouped[person['person_id']].append(person)

grouped = grouped.values()
这会将输入列表排序为bucket,然后将所有bucket放回外部列表。如果需要按id对输出进行排序,可以使用:

grouped = [grouped['pid'] for pid in sorted(grouped)]
如果需要按排序顺序生成原始列表,或者可以按排序顺序生成原始列表,还可以使用进行分组:

from itertools import groupby
from operator import itemgetter

grouped = [list(g) for p, g in groupby(inputlist, key=itemgetter('person_id'))]

但是这确实需要先排序
inputlist

@flornake:实际上,它们是排序的,而不是在代码的第一行。(对不起,我在看到你的答案之前删除了我的第一条评论)@flornquake:ick,我错过了那条。@flornquake:adjusted,在这种情况下,首先给出
defaultdict
方法。@MartijnPieters是一个很大的变化,如果我想按两个键分组:person\u id和job\u id?@flornquake:实际上,它们是排序的。不在第一行代码中。(对不起,我在看到你的答案之前删除了我的第一条评论)@flornquake:ick,我错过了那条。@flornquake:adjusted,在这种情况下,首先给出
defaultdict
方法。@MartijnPieters是一个很大的变化,如果我想按两个键分组:person\u id和job\u id?