`
heipark
  • 浏览: 2094831 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python itertools_groupby使用示例(转)

 
阅读更多

转自: http://freshfoo.com/blog/itertools_groupby

 

A relatively unknown part of the Python standard library that I find myself using fairly regularly at work these days is the groupby function in the itertools module. In a nutshell, groupby takes an iterator and breaks it up into sub-iterators based on changes in the "key" of the main iterator. This is of course done without reading the entire source iterator into memory.

The "key" is almost always based on some part of the items returned by the iterator. It is defined by a "key function", much like the sorted builtin function. groupby probably works best when the data is grouped by the key but this isn't strictly necessary. It depends on the use case.

I've successfully used groupby for splitting up the results of large database queries or the contents of large data files. The resulting code ends up being clean and small.

Here's an example:

from itertools import groupby
from operator import itemgetter

things = [('2009-09-02', 11),
          ('2009-09-02', 3),
          ('2009-09-03', 10),
          ('2009-09-03', 4),
          ('2009-09-03', 22),
          ('2009-09-06', 33)]

for key, items in groupby(things, itemgetter(0)):
    print key
    for subitem in items:
        print subitem
    print '-' * 20

Here the dummy data in the "things" list is grouped by the first item of each element (that is, the key is the first element). For each key, the key is printed followed by the items returned by each sub-iterator.

The output looks like:

2009-09-02
('2009-09-02', 11)
('2009-09-02', 3)
--------------------
2009-09-03
('2009-09-03', 10)
('2009-09-03', 4)
('2009-09-03', 22)
--------------------
2009-09-06
('2009-09-06', 33)
-------------------

The "things" list is a contrived example. In a real world situation this could be a database cursor object or a CSV reader object. Any iterable object can be used.

Here's a closer look at what groupby is doing using the Python interactive shell:

>>> iterator = groupby(things, itemgetter(0))
>>> iterator
<itertools.groupby object at 0x95d3acc>
>>> iterator.next()
('2009-09-02', <itertools._grouper object at 0x95e0d0c>)
>>> iterator.next()
('2009-09-03', <itertools._grouper object at 0x95e0aec>)

You can see how a key and sub-iterator are returned for each pass through the groupby iterator.

groupby is a handy tool to have under your belt. Think of it whenever you need to split up a dataset by some criteria.

 

 

--end 

分享到:
评论

相关推荐

    python 迭代

    本文将通过一个具体的示例来讲解如何使用Python标准库中的`itertools.groupby`函数来进行数据的分组与汇总。 #### 一、`groupby`简介 `itertools.groupby`是Python内置的一个非常强大的工具,用于对已排序的数据...

    python去重,一个由dict组成的list的去重示例

    这种方法结合了排序和分组的概念,通过先对列表进行排序,然后利用`itertools.groupby`来去除重复项。 ```python from itertools import groupby from operator import itemgetter def distinct3(items): key = ...

    Q703207 list如何实现动态分组

    2. **使用itertools.groupby**:Python的`itertools.groupby`函数可以对连续的、具有相同键的元素进行分组,但它需要先对原始list进行排序。 ```python from itertools import groupby def dynamic_grouping_with_...

    Python进阶——time、random、collections、itertools

    - `itertools.groupby(iterable, key=None)`:根据key函数对元素分组,返回一个可迭代的groupby对象。 这些库提供了强大的功能,让Python开发者能够更高效地处理时间、生成随机数、处理复杂数据结构和迭代操作,极...

    python验证码识别教程之利用滴水算法分割图片

    from itertools import groupby def binarizing(img, threshold): img = img.convert("L") pixdata = img.load() w, h = img.size for y in range(h): for x in range(w): if pixdata[x, y] pixdata[x, y] ...

    27篇python小片段文章.pdf

    使用Pythonic的写法可以简洁地对列表进行分组操作,如使用itertools模块中的groupby函数。 15. 列表分组的不同组数: 文件中提到了将一个列表分组成不同大小的子列表的需求,可以通过编写函数来动态实现这一功能...

    Python库 | lazyops-0.0.91.tar.gz

    5. **惰性分组**:`lazyops.groupby`函数,类似Python内置的`itertools.groupby`,但其惰性特性使大数据集的分组更加高效。 6. **性能优化**:`lazyops-0.0.91`可能针对某些操作进行了性能优化,以提高处理大型数据...

    《Python+Cookbook》第三版中文

    15. **通过某个字段将记录分组**:介绍了如何使用`itertools.groupby`函数根据某个字段对数据进行分组。 16. **过滤序列元素**:演示了如何使用`filter`函数或其他方法来过滤序列中的元素。 17. **从字典中提取...

    Python数组遍历的简单实现方法小结

    **示例2:使用`itertools.groupby()`按条件分组:** ```python from operator import itemgetter from itertools import groupby items = [ {'name': 'apple', 'type': 'fruit'}, {'name': 'banana', 'type': '...

    py代码-按个进行分组

    在Python中,我们可以使用内置的`itertools.groupby()`函数或者通过自定义函数实现这一功能。`groupby()`函数是Python的一个强大工具,它可以将连续重复的元素组合成一组,但需要注意的是,它只对已经排序的数据有效...

    Django 表单模型选择框如何使用分组

    from itertools import groupby from operator import attrgetter from django.forms.models import ModelChoiceIterator, ModelChoiceField class GroupedModelChoiceIterator(ModelChoiceIterator): def __init_...

    Python cookbook(数据结构与算法)根据字段将记录分组操作示例

    主要介绍了Python cookbook(数据结构与算法)根据字段将记录分组操作,结合实例形式分析了itertools.groupby()函数针对字典进行分组操作的相关实现技巧,需要的朋友可以参考下.

    Python对列表去重的多种方法(四种方法)

    在Python中,还有其他一些方法可以进行列表去重,例如使用`filter()`函数配合`lambda`表达式,或者使用`itertools.groupby()`函数。然而,这些方法的适用场景和性能特点各有不同,需要根据实际情况灵活选用。在处理...

    python-pipeline:创建一个测试python管道

    例如,`itertools.chain()`可以合并多个迭代器,`itertools.groupby()`可以对数据进行分组,这些都可以根据需求灵活组合。 在更复杂的情况下,你可能需要编写自定义类来构建一个更强大的管道系统。这通常涉及到定义...

Global site tag (gtag.js) - Google Analytics