python中groupby()函数讲解与示例_Python中groupby的详细说明,python,详解

这篇博客详细介绍了Python内置模块itertools的groupby函数用法,通过实例展示了如何利用groupby对数据进行分组。首先,通过sort函数按'school'字段对字典列表进行排序,然后使用groupby进行分组,输出了分组后的结果。同时,还给出了一个针对数值列表的分组例子,通过自定义函数sorts进行数值分类,并输出了分组后的结果。
摘要由CSDN通过智能技术生成

Python学习笔记:itertools 中的groupby的用法详解

利用代码的结果展示更为清晰

from operator import itemgetter

from itertools import groupby

s1={'name':'wtc','school':'QH','age':21}

s2={'name':'hpl','school':'ND','age':22}

s3={'name':'bfd','school':'ND','age':19}

s4={'name':'hzl','school':'MIT','age':25}

s5={'name':'gmc','school':'MIT','age':22}

s6={'name':'jeamsbandon','school':'MIT','age':24}

lst=[s1,s2,s3,s4,s5,s6]

#通过school进行分组

lst.sort(key=itemgetter('school'))

ls = groupby(lst,itemgetter('school'))

for value,groups in ls:

for group in groups:

print (value,group)

程序运行后的结果:

8a8a6dc8dbbc0960dfe528c9840e3a78.png

Groupby使用之前先进行排序,如果不排序无法进行分组,或者说分组可能达不到预期。sort()是永久性排序,会改变原列表顺序;sorted()是临时排序,不会改变原列表顺序。lst=[s1,s2,s3,s4,s5,s6] 把这六个字典存在列表中,使用sort排序对列表操作。lst.sort(key=itemgetter(‘school’))的意思是按字典中键值对中的键school对应的值来进行排序。等待排序完成后执行ls = groupby(lst,itemgetter(‘school’)) 这时的操作是把排好序的列表lst再进行分组,还是按照 键school对应的值来进行分组。所以就会分成[{‘name’:‘hpl’,‘school’:‘ND’,‘age’:22},{‘name’:‘bfd’,‘school’:‘ND’,‘age’:19}]这两个一组,然后[{‘name’:‘wtc’,‘school’:‘QH’,‘age’:21} ]自己一组。 [{‘name’:‘hzl’,‘school’:‘MIT’,‘age’:25},{‘name’:‘gmc’,‘school’:‘MIT’,‘age’:22},{‘name’:‘jeamsbandon’,‘school’:‘MIT’,‘age’:24}]三个一组,然后for value,groups in ls: for group in groups: print value,group 中value取的是键school对应的值,而groups取的是一个组,也就是上面三个组,所以group取的是组内的一整个字典。

下面是对数值进行操作:

from itertools import groupby

lst=[45, 70, 55, 66, 87, 98, 100, 88, 96, 68]

def sorts(valuess):

if valuess < 60:

return 'not pass'

elif valuess >= 90:

return 'excellence'

else:

return 'OK'

print ([(value,list(group)) for value,group in groupby(sorted(lstt),key=sorts)])

程序运行后的结果:

ed3f4594d09744dbba9b5561cceccc7a.png

[(k,list(g))for k,g in groupby(sorted(lst),key=gb)] sorted(lst)对于列表lst中的数值进行临时排序,排序时的关键字是按照从函数gb中返回来的结果。groupby(sorted(lst),key=gb) 然后进行分组,因为排序是从小到大的顺序进行排列的,所以整个分组的结果就是[(‘less’, [2, 6, 8, 9]), (‘middle’, [11, 25, 29]), (‘great’, [43, 51, 66])]

,而变成列表方式输出是因为(k,list(g))首先把g取回来的组变成了列表形式,最后输出的时使用列表框括起来的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值