《笔记》Python itertools的groupby分组数据处理
今天遇到这么一个需求,需要将这样的数据进行分组处理:
[(, ), (, ), (, ), (, ), (, ), (, )]
处理之后我可能需要得到这样的结果:
[(, (, 4)), (, (, 6)), (, (, )), (, (, ))]
找了一些办法,最后想到了以前用过的在itertools里面的包groupby方法,因为比较少使用所以总是忘。它可以轻松的实现分组功能,由于是itertools包里面的,所以它的返回是一个迭代器。这一点要注意下面我们写代码来跑一下。
from itertools import groupby
from operator import itemgetter
x = [(1, 2), (2, 3), (1, 4), (5, 5), (3, 4), (2, 6)]
soooo = sorted(x, key=itemgetter(0))
p = groupby(soooo, key=itemgetter(0))
for i in p:
print i[0], [_[1] for _ in i[1]] output:
1 [2, 4]
2 [3, 6]
3 [4]
5 [5]
你可以使用itemgetter也可以直接顺手使用lamda表达式看你自己。
其实笨点的方法,用default dict似乎也可以实现。还是先然后把没组tuple的 第一个元素做key 往后追加,得到一个字典。
之后再用字典.keys()方法获得去重的键,用values的方法获得数组。这种方法似乎还不需要排序,美滋滋。groupby使用之前要排序,否则无法达到效果。
Reference:
https://stackoverflow.com/questions/3749512/python-group-by Python group by
《笔记》Python itertools的groupby分组数据处理的更多相关文章
- Python中itertools.groupby分组的使用
Python中itertools.groupby分组的使用 有时候我们需要给一个列表按照某个属性分组,可以借助groupby来实现. 比如:一下列表我想以严重程度给它分组,并求出每组的元素个数. fr ...
- Python中的字典分组函数(groupby,itertools)
from operator import itemgetter # itemgetter用来去dict中的key,省去了使用lambda函数 from itertools import groupby ...
- python笔记之itertools模块
python笔记之itertools模块 itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生 ...
- Python标准库笔记(10) — itertools模块
itertools 用于更高效地创建迭代器的函数工具. itertools 提供的功能受Clojure,Haskell,APL和SML等函数式编程语言的类似功能的启发.它们的目的是快速有效地使用内存, ...
- itertools.groupby()分组字典列表
## itertools.groupby()分组字典列表数据 from operator import itemgetter from itertools import groupby student ...
- Python itertools模块详解
这货很强大, 必须掌握 文档 链接 http://docs.python.org/2/library/itertools.html pymotw 链接 http://pymotw.com/2/iter ...
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识
Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...
- pandas获取groupby分组里最大值所在的行,获取第一个等操作
pandas获取groupby分组里最大值所在的行 10/May 2016 python pandas pandas获取groupby分组里最大值所在的行 如下面这个DataFrame,按照Mt分组, ...
- python itertools 用法
1.介绍itertools 是python的迭代器模块,itertools提供的工具相当高效且节省内存.使用这些工具,你将能够创建自己定制的迭代器用于高效率的循环.- 无限迭代器 itertools包 ...
随机推荐
- centos7下安装docker(15.1跨主机网络)
之前学习了单个host上的网络,我们知道单个host上的网络有:none,host,bridge和joined,他们解决了单个host上面的容器通信的问题:接下来我们讨论跨主机间容器通信的方案 跨主机 ...
- Google Colab 基本操作
## 上传 from google.colab import files uploaded = files.upload() for fn in uploaded.keys(): print('Use ...
- 深入学习vue指令,自定义指令解决开发痛点
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code v-model指令 vue.js的定义是一个mvvm框架,将它发挥到极致能够极大的提升 ...
- multi函数
def multi(*a): sum = 1 for i in a: sum = sum *i return sum 若干个参数 百度了一下
- pytorch visdom可视化工具学习—1—详细使用-1—基本使用函数
使用教程,参考: https://github.com/facebookresearch/visdom https://www.pytorchtutorial.com/using-visdom-for ...
- appium-基本操作的再次封装(加上文件路径、log、截图、异常处理)
一:日志 二:文件路径 三:截图 四:异常处理(对基本操作,例如:等待元素出现.点击.按键灯进行封装.加上截图和日志记录)
- centos 7 安装 MySQL 5.6
由于Centos7 默认数据库是mariabd,所以通过rpm安装MySQL需要卸载原有的Mariabd,再下载所有的依赖包比较麻烦且容易出错.通过yum的方式安装.yum其实是rpm的一个升级将所有 ...
- vscode快捷键大全
一般Ctrl + Shift + P,F1显示命令调色板 Ctrl + P快速打开,转到文件...Ctrl + Shift + N新窗口/实例 Ctrl + Shift + W关闭窗口/实例 Ctrl ...
- Python股票分析系列——数据整合.p7
欢迎来到Python for Finance教程系列的第7部分. 在之前的教程中,我们为整个标准普尔500强公司抓取了雅虎财经数据. 在本教程中,我们将把这些数据组合到一个DataFrame中. 到此 ...
- 企业IT架构转型之道,阿里巴巴中台战略思想与架构实战
前言: 晚上11点多闲来无事,打开QQ技术群,发现有关 '中心化与引擎化' 的话题,本着学习的心态向大佬咨询,大佬推荐一本书,我大概看了有四分之一的样子,对于我这种对架构迷茫的人来说,如鱼得水,于是特 ...