如何有效地根据python中键的值对字典列表进行分类?

Zei*_*zar 3 python list categorization

我在 python 中有一个字典列表,我想根据所有字典中存在的键的值对它们进行分类,并分别处理每个类别。我不知道这些值是什么,我只知道存在一个特殊的键。这是清单:

dictList = [
            {'name': 'name1', 'type': 'type1', 'id': '14464'}, 
            {'name': 'name2', 'type': 'type1', 'id': '26464'},
            {'name': 'name3', 'type': 'type3', 'id': '36464'},
            {'name': 'name4', 'type': 'type5', 'id': '43464'},
            {'name': 'name5', 'type': 'type2', 'id': '68885'}
            ]
Run Code Online (Sandbox Code Playgroud)

这是我目前使用的代码:

while len(dictList):
    category = [l for l in dictList if l['type'] == dictList[0]['type']]
    processingMethod(category)
    for item in category:
        dictList.remove(item)
Run Code Online (Sandbox Code Playgroud)

上面列表上的这个迭代会给我以下结果:

Iteration 1:
            category = [
                        {'name': 'name1', 'type': 'type1', 'id': '14464'}, 
                        {'name': 'name2', 'type': 'type1', 'id': '26464'},
                        ]

Iteration 2:
            category = [
                        {'name': 'name3', 'type': 'type3', 'id': '36464'}
                        ]

Iteration 3:
            category = [
                        {'name': 'name4', 'type': 'type5', 'id': '43464'}
                        ]

Iteration 4:
            category = [
                        {'name': 'name5', 'type': 'type2', 'id': '68885'}
                        ]
Run Code Online (Sandbox Code Playgroud)

每次,我都会得到一个类别,对其进行处理,最后删除处理过的项目以迭代剩余的项目,直到没有剩余的项目。有什么想法可以让它变得更好吗?

eme*_*eth 5

您的代码可以使用重写 itertools.groupby

for _, category in itertools.groupby(dictList, key=lambda item:item['type']):
    processingMethod(list(category))
Run Code Online (Sandbox Code Playgroud)

或者如果 processingMethod 可以处理iterable

for _, category in itertools.groupby(dictList, key=lambda item:item['type']):
    processingMethod(category)
Run Code Online (Sandbox Code Playgroud)