• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-09) 25次浏览 已收录 0个评论
本篇文章给大家带来的内容是关于Python如何利用itertools.groupby() 根据字段将记录分组,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

1、需求

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

2、解决方案

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

实例:

from operator import itemgetterfrom itertools import groupbyrows=[    {'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')<a>本文来源gao*daima.com搞@代#码&网6</a>):    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 defaultdictrows=[    {'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() 根据字段将记录分组的详细内容,更多请关注搞代码gaodaima其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python如何利用itertools.groupby() 根据字段将记录分组

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址