Python通过Groupby实现分组
2021-05-10 本文已影响0人
北邮郭大宝
如果有对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