Python 按属性对字典项进行分组

Python 按属性对字典项进行分组,python,dictionary,Python,Dictionary,我正在尝试按特定键对字典中的项进行分组,假设我们有以下字典: [{'type': 'animal', 'name': 'rabbit'}, {'type': 'animal', 'name': 'cow'}, {'type': 'plant', 'name': 'orange tree'}, {'type': 'animal', 'name': 'coyote'}] 我想按类型对这些项目进行分组。根据这一点,可以使用defaultdict()来完成,因为它不会引发KeyError,如下所示:

我正在尝试按特定键对字典中的项进行分组,假设我们有以下字典:

[{'type': 'animal', 'name': 'rabbit'}, {'type': 'animal', 'name': 'cow'}, {'type': 'plant', 'name': 'orange tree'}, {'type': 'animal', 'name': 'coyote'}]
我想按
类型对这些项目进行分组。根据这一点,可以使用
defaultdict()
来完成,因为它不会引发
KeyError
,如下所示:

grouped = defaultdict()
for item in items:
    grouped[item.type].append(item)
然而,我实际上得到了一个
keyrerror

那怎么了?我看到的所有信息都说
defaultdict()

我使用的是Python 2.7。

使用
defaultdict(list)
,而不是
defaultdict()。阅读defaultdict的文档以了解更多信息

此外,您不能使用某些dict.a_键(在您的情况下:.type)-您必须使用一些dict['a_键]](在您的情况下['type'])

使用
defaultdict(list)
,而不是
defaultdict()
。阅读defaultdict的文档以了解更多信息


此外,您不能使用某些dict.a_键(在您的情况下为:.type)-您必须使用某些dict['a_键]](在您的情况下为['type'])

您还可以使用普通字典及其方法:

结果将是这样(格式很好):


您还可以使用普通词典及其方法:

结果将是这样(格式很好):

l = [{'type': 'animal', 'name': 'rabbit'}, {'type': 'animal', 'name': 'cow'}, {'type': 'plant', 'name': 'orange tree'}, {'type': 'animal', 'name': 'coyote'}]
d = {}
for x in l:
    d.setdefault(x["type"], []).append(x)
print d
{'plant' : [{'type': 'plant', 'name': 'orange tree'}], 
 'animal': [{'type': 'animal', 'name': 'rabbit'}, 
            {'type': 'animal', 'name': 'cow'}, 
            {'type': 'animal', 'name': 'coyote'}]}
from collections import defaultdict

animals=[{'type': 'animal', 'name': 'rabbit'}, {'type': 'animal', 'name': 'cow'}, 
{'type': 'plant', 'name': 'orange tree'}, {'type': 'animal', 'name': 'coyote'}]

animal_by_type = defaultdict(list)
for animal in animals:
    animal_by_type[animal['type']].append(animal['name'])
print animal_by_type