详解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实现约瑟夫环问题的方法
May 03 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 Python
matplotlib作图添加表格实例代码
Jan 23 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
python中yield的用法详解——最简单,最清晰的解释
Apr 04 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
Python实现的栈、队列、文件目录遍历操作示例
May 06 Python
python图形用户接口实例详解
Dec 16 Python
最新2019Pycharm安装教程 亲测
Feb 28 Python
python os.listdir()乱码解决方案
Jan 31 Python
python爬取豆瓣电影排行榜(requests)的示例代码
Feb 18 Python
用Python可视化新冠疫情数据
Jan 18 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+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
浅谈PHP中JSON数据操作
2015/07/01 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
浅析JavaScript中的delete运算符
2013/11/30 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
ES6中module模块化开发实例浅析
2017/04/06 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
2018/03/21 Javascript
Angular ElementRef简介及其使用
2018/10/01 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
2018/10/10 Javascript
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
详解Python locals()的陷阱
2019/03/26 Python
Python 3.8中实现functools.cached_property功能
2019/05/29 Python
在python中画正态分布图像的实例
2019/07/08 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
django框架forms组件用法实例详解
2019/12/10 Python
Python虚拟环境库virtualenvwrapper安装及使用
2020/06/17 Python
python打包多类型文件的操作方法
2020/09/21 Python
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
毕业研究生的自我鉴定
2013/11/30 职场文书
生物技术专业求职信
2014/06/10 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
施工现场安全管理制度
2015/08/05 职场文书
python四种出行路线规划的实现
2021/06/23 Python
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL