上一篇文章: Python实用技法第13篇:对自定义类对象排序:attrgetter
下一篇文章: Python实用技法第15篇:筛选序列中的元素
有一系列的字典或对象实例,咱们想根据某个特定的字段来分组迭代数据。
itertools.groupby()函数在对数据进行分组时特别有用。segmentfault
实例:数据结构
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)
结果:app
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'}
Python实用技法第5篇:一键多值字典:defaultdict
函数groupby()经过扫描序列找出拥有相同值(或是由参数key指定的函数所返回的值)的序列项,并将它们分组。groupby()建立了一个迭代器,而在每次迭代时都会返回一个值(value)和一个子迭代器(sub_iterator),这个迭代器能够产生全部在该分组内具备该值得项。函数
在这里重要的是首先要根据age对数据进行排序。由于groupby()不会排序。ui
若是只是简单的根据日期将数据分组到一块儿,放进一个大的数据结构中以容许进行随机访问,那么利用defaultdict()构建一个一键多值字典可能会更好:code
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篇:筛选序列中的元素