详解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比较两个列表大小的方法
Jul 11 Python
python Django批量导入数据
Mar 25 Python
Python实现识别手写数字大纲
Jan 29 Python
Python求解任意闭区间的所有素数
Jun 10 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
对Python模块导入时全局变量__all__的作用详解
Jan 11 Python
Python将列表数据写入文件(txt, csv,excel)
Apr 03 Python
python 实现在tkinter中动态显示label图片的方法
Jun 13 Python
pycharm中显示CSS提示的知识点总结
Jul 29 Python
python数据爬下来保存的位置
Feb 17 Python
pandas dataframe 中的explode函数用法详解
May 18 Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 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
apache+php+mysql安装配置方法小结
2010/08/01 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
2011/10/29 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
php简单创建zip压缩文件的方法
2016/04/30 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
bootstrap suggest下拉框使用详解
2017/04/10 Javascript
详解vue mint-ui源码解析之loadmore组件
2017/10/11 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
解决layer.confirm选择完之后消息框不消失的问题
2019/09/16 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
Python实现程序的单一实例用法分析
2015/06/03 Python
Python基于DES算法加密解密实例
2015/06/03 Python
Python3 操作符重载方法示例
2017/11/23 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
工商管理专业应届生求职信
2013/11/04 职场文书
学雷锋标语
2014/06/25 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
2014教师年度思想工作总结
2014/11/10 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
大学生入党自传2015
2015/06/26 职场文书
python实现简易自习室座位预约系统
2021/06/30 Python