使用Python将字典分组的最佳方法

9

我有一个字典列表,例如:

[{'person':'guybrush','job':'pirate'},{'person':'leChuck','job':'pirate'}, {'person':'elaine','job':'governor'}]

我希望能够按照职业将人员分组显示。因此,在前端,我们可以选择一个职业并查看所有拥有该职业的人员。
我之前用了很多嵌套循环和列表来实现这个功能,让人感到困惑。
你认为获得这个结果最有效的方法是什么?
pirate = ['guybrush','leChuck']
governor = ['elaine']

1
可能是Python分组的重复问题。 - Björn Pollex
你是对的,看起来我重复了一个问题。抱歉! - RonnyKnoxville
敏捷开发与此有何关系? - Tim Pietzcker
与其创建一个预先定义的列表集,不如让列表被动态地创建。 - RonnyKnoxville
@JackalopeZero:在软件开发的背景下,“敏捷”一词有一个特殊含义,因此有些人可能会对您在那里使用它的方式感到困惑。 - Björn Pollex
1个回答

21

使用defaultdict非常简单:

persons_by_jobs = defaultdict(list)
for person in persons:
    persons_by_jobs[person['job']].append(person['person'])

只是好奇@Björn Pollex,你为什么选择这个而不是groupby操作呢? - HussienK
3
如果你在谈论 itertools.groupby,它要求按照分组谓词事先对列表进行排序。这意味着我们需要两次遍历数据,一次用于排序,一次用于分组。我认为我在这里提出的解决方案更简单,可能也更有效率。 - Björn Pollex
如果我还想在每个任务中排序它(假设默认情况下升序),比如我想得到这个结果:governor = ['elaine'] pirate = ['leChuck','guybrush'] - inquisitive

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接