详解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抓取网页中的图片示例
Feb 28 Python
python常见数制转换实例分析
May 09 Python
Python正则表达式教程之一:基础篇
Mar 02 Python
python八大排序算法速度实例对比
Dec 06 Python
Python实现PS滤镜中马赛克效果示例
Jan 20 Python
基于Python对数据shape的常见操作详解
Dec 25 Python
python实现剪切功能
Jan 23 Python
numpy和pandas中数组的合并、拉直和重塑实例
Jun 28 Python
python库matplotlib绘制坐标图
Oct 18 Python
Python异常处理机制结构实例解析
Jul 23 Python
虚拟机下载python是否需要联网
Jul 27 Python
10行Python代码实现Web自动化管控的示例代码
Aug 14 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
elgg 获取文件图标地址的方法
2010/03/20 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
PHP学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
php经典趣味算法实例代码
2020/01/21 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
实例讲解jquery与json的结合
2016/01/07 Javascript
jQuery动态添加与删除tr行实例代码
2016/10/18 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
python3使用tkinter实现ui界面简单实例
2014/01/10 Python
基于python socketserver框架全面解析
2017/09/21 Python
基于python历史天气采集的分析
2019/02/14 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
纽约家具、家居装饰和地毯店:ABC Carpet & Home
2017/06/21 全球购物
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
10条PHP编程习惯
2014/05/26 面试题
自我鉴定思想方面
2013/10/07 职场文书
大学生求职信
2014/06/17 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
工程移交协议书
2016/03/24 职场文书