详解Python中的分组函数groupby和itertools)


Posted in Python onJuly 11, 2018

具体代码如下所示:

from operator import itemgetter #itemgetter用来去dict中的key,省去了使用lambda函数
from itertools import groupby #itertool还包含有其他很多函数,比如将多个list联合起来。。
d1={'name':'zhangsan','age':20,'country':'China'}
d2={'name':'wangwu','age':19,'country':'USA'}
d3={'name':'lisi','age':22,'country':'JP'}
d4={'name':'zhaoliu','age':22,'country':'USA'}
d5={'name':'pengqi','age':22,'country':'USA'}
d6={'name':'lijiu','age':22,'country':'China'}
lst=[d1,d2,d3,d4,d5,d6]
#通过country进行分组:
lst.sort(key=itemgetter('country')) #需要先排序,然后才能groupby。lst排序后自身被改变
lstg = groupby(lst,itemgetter('country')) 
#lstg = groupby(lst,key=lambda x:x['country']) 等同于使用itemgetter()
for key,group in lstg:
  for g in group: #group是一个迭代器,包含了所有的分组列表
    print key,g

返回:

China {'country': 'China', 'age': 20, 'name': 'zhangsan'}
China {'country': 'China', 'age': 22, 'name': 'lijiu'}
JP {'country': 'JP', 'age': 22, 'name': 'lisi'}
USA {'country': 'USA', 'age': 19, 'name': 'wangwu'}
USA {'country': 'USA', 'age': 22, 'name': 'zhaoliu'}
USA {'country': 'USA', 'age': 22, 'name': 'pengqi'}
print [key for key,group in lstg] #返回:['China', 'JP', 'USA']
print [(key,list(group)) for key,group in lstg]
#返回的list中包含着三个元组:
[('China', [{'country': 'China', 'age': 20, 'name': 'zhangsan'}, {'country': 'China', 'age': 22, 'name': 'lijiu'}]), ('JP', [{'country': 'JP', 'age': 22, 'name': 'lisi'}]), ('USA', [{'country': 'USA', 'age': 19, 'name': 'wangwu'}, {'country': 'USA', 'age': 22, 'name': 'zhaoliu'}, {'country': 'USA', 'age': 22, 'name': 'pengqi'}])]
print dict([(key,list(group)) for key,group in lstg])
#返回的是一个字典:
{'JP': [{'country': 'JP', 'age': 22, 'name': 'lisi'}], 'China': [{'country': 'China', 'age': 20, 'name': 'zhangsan'}, {'country': 'China', 'age': 22, 'name': 'lijiu'}], 'USA': [{'country': 'USA', 'age': 19, 'name': 'wangwu'}, {'country': 'USA', 'age': 22, 'name': 'zhaoliu'}, {'country': 'USA', 'age': 22, 'name': 'pengqi'}]}
print dict([(key,len(list(group))) for key,group in lstg])
#返回每个分组的个数:
{'JP': 1, 'China': 2, 'USA': 3}
#返回包含有2个以上元素的分组
print [key for key,group in groupby(sorted(lst,key=itemgetter('country')),itemgetter('country')) if len(list(group))>=2]
#返回:['China', 'USA']
lstg = groupby(sorted(lst,key=itemgetter('country')),key=itemgetter('country')) 
lstgall=[(key,list(group)) for key,group in lstg ]
print dict(filter(lambda x:len(x[1])>2,lstgall)) 
#过滤出分组后的元素个数大于2个的分组,返回:
{'USA': [{'country': 'USA', 'age': 19, 'name': 'wangwu'}, {'country': 'USA', 'age': 22, 'name': 'zhaoliu'}, {'country': 'USA', 'age': 22, 'name': 'pengqi'}]}

自定义分组:

from itertools import groupby
lst=[2,8,11,25,43,6,9,29,51,66]
def gb(num):
  if num <= 10:
    return 'less'
  elif num >=30:
    return 'great'
  else:
    return 'middle'
print [(k,list(g))for k,g in groupby(sorted(lst),key=gb)]

返回:

[('less', [2, 6, 8, 9]), ('middle', [11, 25, 29]), ('great', [43, 51, 66])]

总结

以上所述是小编给大家介绍的Python中的分组函数groupby和itertools),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python插入数据到列表的方法
Apr 30 Python
python实现统计代码行数的方法
May 22 Python
基于Python 的进程管理工具supervisor使用指南
Sep 18 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
Jul 11 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
Dec 06 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
Aug 06 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
Aug 20 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
Feb 07 Python
Python对Tornado请求与响应的数据处理
Feb 12 Python
虚拟机下载python是否需要联网
Jul 27 Python
Python3爬虫中识别图形验证码的实例讲解
Jul 30 Python
Python中的groupby分组功能的实例代码
Jul 11 #Python
python中实现字符串翻转的方法
Jul 11 #Python
Python3.7中安装openCV库的方法
Jul 11 #Python
Python实用技巧之利用元组代替字典并为元组元素命名
Jul 11 #Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
Jul 11 #Python
python 对txt中每行内容进行批量替换的方法
Jul 11 #Python
python遍历文件夹,指定遍历深度与忽略目录的方法
Jul 11 #Python
You might like
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
jQuery实现跨域
2015/02/03 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
解决layer 动态加载select 失效的问题
2019/09/18 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
解决Python requests 报错方法集锦
2017/03/19 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
为什么称python为胶水语言
2020/06/16 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
python如何修改文件时间属性
2021/02/05 Python
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
EJB的激活机制
2013/10/25 面试题
校园创业策划书
2014/01/14 职场文书
干部鉴定材料
2014/05/18 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
小学生交通安全寄语
2015/02/27 职场文书
敬老院活动感想
2015/08/07 职场文书
高中英语教学反思范文
2016/03/02 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
java代码实现空间切割
2022/01/18 Java/Android
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python