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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容