上一篇文章: 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篇:篩選序列中的元素