Python 将字典列表分组到具有相同属性值的字典列表
我有字典列表,每本字典都有属性person\u idPython 将字典列表分组到具有相同属性值的字典列表,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_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?