脚本宝典收集整理的这篇文章主要介绍了Python实用技法第14篇:根据字段将记录分组:itertools.groupby(),脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
上一篇文章:Python实用技法第13篇:对自定义类对象排序:attrgetter
下一篇文章:Python实用技法第15篇:筛选序列中的元素
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实用技法第5篇:一键多值字典:defaultdict
函数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实用技法第13篇:对自定义类对象排序:attrgetter
下一篇文章:Python实用技法第15篇:筛选序列中的元素
以上是脚本宝典为你收集整理的Python实用技法第14篇:根据字段将记录分组:itertools.groupby()全部内容,希望文章能够帮你解决Python实用技法第14篇:根据字段将记录分组:itertools.groupby()所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。