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)

效果:


也可以通過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)

效果:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章