本文实例讲述了Python根据字段将记录分组操作。分享给大家供大家参考,具体如下:
问题:想根据字典或者对象实例的某个特定的字典(比如日期)来分组迭代数据
解决方案:itertools.groupby()
函数在对数据进行分组时特别有用(前提是先以目标字典进行排序)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
rows = [ { 'address' : '5412 N CLARK' , 'date' : '07/01/2012' }, { 'address' : '5148 N CLARK' , 'date' : '07/04/2012' }, { 'address' : '5800 E 58TH' , 'date' : '07/02/2012' }, { 'address' : '2122 N CLARK' , 'date' : '07/03/2012' }, { 'address' : '5645 N RAVENSWOOD' , 'date' : '07/02/2012' }, { 'address' : '1060 W ADDISON' , 'date' : '07/02/2012' }, { 'address' : '4801 N BROADWAY' , 'date' : '07/01/2012' }, { 'address' : '1039 W GRANVILLE' , 'date' : '07/04/2012' }, ] from operator import itemgetter from itertools import groupby rows.sort(key = itemgetter( 'date' )) #首先以date字段进行排序 for date, items in groupby(rows, key = itemgetter( 'date' )): #再以date进行分组 print (date) for i in items: print ( ' ' , i) # 如果只是简单地根据日期将数据分组到一起,放进一个大的数据结构中以允许进行随机访问,那么可以利用defaultdict构建一个一键多值的字典会更好 #Example of building a multidict from collections import defaultdict rows_by_date = defaultdict( list ) #创建一个一键多值的字典, for row in rows: rows_by_date[row[ 'date' ]].append(row) for r in rows_by_date[ '07/01/2012' ]: print (r) |
运行结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
07 / 01 / 2012 { 'address' : '5412 N CLARK' , 'date' : '07/01/2012' } { 'address' : '4801 N BROADWAY' , 'date' : '07/01/2012' } 07 / 02 / 2012 { 'address' : '5800 E 58TH' , 'date' : '07/02/2012' } { 'address' : '5645 N RAVENSWOOD' , 'date' : '07/02/2012' } { 'address' : '1060 W ADDISON' , 'date' : '07/02/2012' } 07 / 03 / 2012 { 'address' : '2122 N CLARK' , 'date' : '07/03/2012' } 07 / 04 / 2012 { 'address' : '5148 N CLARK' , 'date' : '07/04/2012' } { 'address' : '1039 W GRANVILLE' , 'date' : '07/04/2012' } { 'address' : '5412 N CLARK' , 'date' : '07/01/2012' } { 'address' : '4801 N BROADWAY' , 'date' : '07/01/2012' } |
(代码摘自《Python Cookbook》)
希望本文所述对大家Python程序设计有所帮助。
原文链接:http://www.cnblogs.com/apple2016/p/5747395.html