详解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获取标准北京时间的方法
Mar 24 Python
python简单的函数定义和用法实例
May 07 Python
python实现自动登录人人网并采集信息的方法
Jun 28 Python
Python中 Lambda表达式全面解析
Nov 28 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 Python
pytorch加载自定义网络权重的实现
Jan 07 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
Feb 25 Python
Python函数递归调用实现原理实例解析
Aug 11 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
Jan 26 Python
python之基数排序的实现
Jul 26 Python
使用python生成大量数据写入es数据库并查询操作(2)
Sep 23 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函数的实现原理及性能分析(三)
2015/05/13 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
使javascript也能包含文件
2006/10/26 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
动态读取JSON解析键值对的方法
2014/06/03 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
Javascript函数式编程简单介绍
2015/10/11 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
React学习笔记之条件渲染(一)
2017/07/02 Javascript
jQuery高级编程之js对象、json与ajax用法实例分析
2019/11/01 jQuery
jquery获取input输入框中的值
2019/11/13 jQuery
JavaScript多种图形实现代码实例
2020/06/28 Javascript
js+css3实现炫酷时钟
2020/08/18 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
js实现缓动动画
2020/11/25 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
Python操作CouchDB数据库简单示例
2015/03/10 Python
Python操作MongoDB数据库的方法示例
2018/01/04 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
Python之使用adb shell命令启动应用的方法详解
2019/01/07 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
Intersport西班牙:在线体育商店
2019/11/06 全球购物
工程师求职简历的自我评价分享
2013/10/10 职场文书
创业计划书怎样才能打动风投
2014/01/01 职场文书
优秀士兵先进事迹
2014/02/06 职场文书
党委班子剖析材料
2014/08/21 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
小兵张嘎观后感300字
2015/06/03 职场文书
2015新员工工作总结范文
2015/10/15 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang