如果有對(duì)list里的元素按照某個(gè)字段進(jìn)行分組的需求的話(huà),可以通過(guò)itertools模塊中的groupby實(shí)現(xiàn)寺滚。
舉例斑鼻,list中包含3個(gè)元素,希望通過(guò)country字段進(jìn)行分組萤彩,再按組操作粪滤,通過(guò)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
也可以通過(guò)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)
除此之外杖小,還可以實(shí)現(xiàn)自定義分組
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