Python通过Groupby实现分组

如果有对list里的元素按照某个字段进行分组的需求的话,可以通过itertools模块中的groupby实现。

举例,list中包含3个元素,希望通过country字段进行分组,再按组操作,通过itemgetter可以取dict中key。

from itertools import groupby
from operator import itemgetter

lst = [
    {
        "id": 1,
        "name": "张三",
        "age": 20,
        "country": "China"
    },
    {
        "id": 2,
        "name": "李四",
        "age": 21,
        "country": "China"
    },
    {
        "id": 3,
        "name": "Tom",
        "age": 18,
        "country": "USA"
    },
]
# 先排序
lst_sorted = sorted(lst, key=itemgetter('country'))
# groupby
for country, items in groupby(lst_sorted, key=itemgetter('country')):
    print(country)
    for item in items:
        print(item)

效果:


1620639084486.jpg

也可以通过lambda取dict中的字段。

# 排序
lst_sorted = sorted(lst, key=lambda x: x.get('country'))
# groupby
for country, items in groupby(lst_sorted, key=lambda x: x.get('country')):
    print(country)
    for item in items:
        print(item)

除此之外,还可以实现自定义分组

def group_by_age(item):
    if item.get("age") <= 18:
        return 'young'
    else:
        return 'adult'


lst_sorted = sorted(lst, key=lambda x: x.get('age'))
for tag, items in groupby(lst_sorted, key=group_by_age):
    print(tag)
    for item in items:
        print(item)

效果:


1620639057838.jpg

你可能感兴趣的:(Python通过Groupby实现分组)