详解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中使用PIL库实现图片高斯模糊实例
Feb 08 Python
Python网站验证码识别
Jan 25 Python
Python实现输出程序执行进度百分比的方法
Sep 16 Python
Python简单读取json文件功能示例
Nov 30 Python
python+tkinter编写电脑桌面放大镜程序实例代码
Jan 16 Python
快速解决PyCharm无法引用matplotlib的问题
May 24 Python
python批量导入数据进Elasticsearch的实例
May 30 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
python实现数字炸弹游戏
Jul 17 Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 Python
Python爬虫基础初探selenium
May 31 Python
Python matplotlib安装以及实现简单曲线的绘制
Apr 26 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
php jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
在PHP中实现使用Guzzle执行POST和GET请求
2019/10/15 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
AngularJS 实现按需异步加载实例代码
2015/10/18 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
CentOS环境中MySQL修改root密码方法
2018/01/07 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
小程序点击图片实现自动播放视频
2020/05/29 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
微信小程序常用赋值方法小结
2019/04/30 Javascript
微信小程序登录态和检验注册过没的app.js写法
2019/05/22 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
python中import学习备忘笔记
2017/01/24 Python
Python做智能家居温湿度报警系统
2018/09/25 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
中学教师岗位职责
2013/11/26 职场文书
好的演讲稿开场白
2013/12/30 职场文书
校园十佳歌手策划书
2014/01/22 职场文书
挂科检讨书范文
2014/02/20 职场文书
大学生操行评语大全
2014/12/31 职场文书
高考百日冲刺决心书
2015/09/23 职场文书
2016年植树节红领巾广播稿
2015/12/17 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
js之ajax文件上传
2021/05/13 Javascript
基于Redis的List实现特价商品列表功能
2021/08/30 Redis