• 技术文章 >后端开发 >Python教程

    Python如何利用itertools.groupby() 根据字段将记录分组

    不言不言2018-10-22 17:21:57转载1591
    本篇文章给大家带来的内容是关于Python如何利用itertools.groupby() 根据字段将记录分组,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

    1、需求

    有一系列的字典或对象实例,我们想根据某个特定的字段来分组迭代数据。

    2、解决方案

    itertools.groupby()函数在对数据进行分组时特别有用。

    实例:

    from operator import itemgetter
    from itertools import groupby
    
    rows=[
        {'name':'mark','age':18,'uid':'110'},
        {'name':'miaomiao','age':28,'uid':'160'},
        {'name':'miaomiao2','age':28,'uid':'150'},
        {'name':'xiaohei','age':38,'uid':'130'},
    ]
    
    #首先根据age排序
    rows.sort(key=itemgetter('age'))
    
    for age,items in groupby(rows,key=itemgetter('age')):
        print(age)
        for i in items:
            print(i)

    结果:

    18
    {'name': 'mark', 'age': 18, 'uid': '110'}
    28
    {'name': 'miaomiao', 'age': 28, 'uid': '160'}
    {'name': 'miaomiao2', 'age': 28, 'uid': '150'}
    38
    {'name': 'xiaohei', 'age': 38, 'uid': '130'}

    3、分析

    python实现一键多值字典的方法实现

    函数groupby()通过扫描序列找出拥有相同值(或是由参数key指定的函数所返回的值)的序列项,并将它们分组。groupby()创建了一个迭代器,而在每次迭代时都会返回一个值(value)和一个子迭代器(sub_iterator),这个迭代器可以产生所有在该分组内具有该值得项。

    在这里重要的是首先要根据age对数据进行排序。因为groupby()不会排序。

    如果只是简单的根据日期将数据分组到一起,放进一个大的数据结构中以允许进行随机访问,那么利用defaultdict()构建一个一键多值字典可能会更好:

    from collections import defaultdict
    
    rows=[
        {'name':'mark','age':18,'uid':'110'},
        {'name':'miaomiao','age':28,'uid':'160'},
        {'name':'miaomiao2','age':28,'uid':'150'},
        {'name':'xiaohei','age':38,'uid':'130'},
    ]
    
    rows_by_age=defaultdict(list)
    for row in rows:
        rows_by_age[row['age']].append(row)
    for a in rows_by_age[28]:
        print(a)

    结果:

    {'name': 'miaomiao', 'age': 28, 'uid': '160'}
    {'name': 'miaomiao2', 'age': 28, 'uid': '150'}

    不考虑排序的话,defaultdict方法一般比groupby快。

    以上就是Python如何利用itertools.groupby() 根据字段将记录分组的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault思否,如有侵犯,请联系admin@php.cn删除
    专题推荐:python
    上一篇:python如何批量修改文件后缀名?批量修改文件后缀名的方法 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • isinstance在python中是什么意思• python字典添加元素的方法是什么• python是面向对象还是面向过程• python中“+=”是什么意思• python中怎么合并两个列表
    1/1

    PHP中文网