博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python使用itertools的groupby来处理数据
阅读量:7098 次
发布时间:2019-06-28

本文共 1926 字,大约阅读时间需要 6 分钟。

  hot3.png

itertools用于高效循环的迭代函数集合, 以后有什么复杂的迭代应该就考虑它.

itertools.groupby(iterable[, key])

返回一个产生按照key进行分组后的值集合的迭代器.

如果iterable在多次连续迭代中生成了同一项,则会定义一个组,如果将此函数应用一个分类列表,那么分组将定义该列表中的所有唯一项,key(如果已提供)是一个函数,应用于每一项,如果此函数存在返回值,该值将用于后续项而不是该项本身进行比较,此函数返回的迭代器生成元素(key, group),其中key是分组的键值,group是迭代器,生成组成该组的所有项。

即:按照keyfunc函数对序列每个元素执行后的结果分组(每个分组是一个迭代器), 返回这些分组的迭代器

源码

class groupby(object):    # [k for k, g in groupby('AAAABBBCCDAABBB')] --> A B C D A B    # [list(g) for k, g in groupby('AAAABBBCCD')] --> AAAA BBB CC D    def __init__(self, iterable, key=None):        if key is None:            key = lambda x: x        self.keyfunc = key        self.it = iter(iterable)        self.tgtkey = self.currkey = self.currvalue = object()    def __iter__(self):        return self    def next(self):        while self.currkey == self.tgtkey:            self.currvalue = next(self.it)    # Exit on StopIteration            self.currkey = self.keyfunc(self.currvalue)        self.tgtkey = self.currkey        return (self.currkey, self._grouper(self.tgtkey))    def _grouper(self, tgtkey):        while self.currkey == tgtkey:            yield self.currvalue            self.currvalue = next(self.it)    # Exit on StopIteration            self.currkey = self.keyfunc(self.currvalue)

应用1

from itertools import groupbyqs = [{'date' : 1},{'date' : 2}][(name, list(group)) for name, group in groupby(qs, lambda p:p['date'])]Out[77]: [(1, [{'date': 1}]), (2, [{'date': 2}])]>>> from itertools import *>>> a = ['aa', 'ab', 'abc', 'bcd', 'abcde']>>> for i, k in groupby(a, len):...     print i, list(k)...2 ['aa', 'ab']3 ['abc', 'bcd']5 ['abcde']

   应用2

from itertools import *from operator import itemgetterd = dict(a=1, b=2, c=1, d=2, e=1, f=2, g=3)di = sorted(d.iteritems(), key=itemgetter(1))for k, g in groupby(di, key=itemgetter(1)):    print k, map(itemgetter(0), g)1 ['a', 'c', 'e']2 ['b', 'd', 'f']3 ['g']

也可参考

转载于:https://my.oschina.net/jastme/blog/1936553

你可能感兴趣的文章
ORACLE PL/SQL编程 游标
查看>>
micro:bit 的完整硬件方案
查看>>
Spring Boot实践--集成WebServices基础开发
查看>>
使用history.back(-1)的问题
查看>>
ubuntu 重设crontab -e的默认编辑器
查看>>
android中WebView小结
查看>>
老男孩教育每日一题-第104天-如何查看linux系统时间?若当前系统时区不是中国,如何修改?...
查看>>
SpringMVC 之 @Autowired 注释使用说明
查看>>
CentOS7 vsftpd安装
查看>>
web上存漏洞及原理分析、防范方法(安全文件上存方法)
查看>>
彻底找到 Tomcat 启动速度慢的元凶
查看>>
java 分布式锁 -图解- 秒懂
查看>>
Android development guide 笔记
查看>>
使用Jmeter+Maven+Jenkins实现接口自动化测试
查看>>
用Class ID做网络分流
查看>>
nginx配置详解
查看>>
shell脚本之循环结构&函数的使用(二)
查看>>
Java基础学习总结(23)——GUI编程
查看>>
navigationItem标题以及左右button的创建...
查看>>
RabbitMQ学习总结(7)——Spring整合RabbitMQ实例
查看>>