python数组随机分组_Python实⽤⿊科技——以某个字段进⾏
分组
需求:
当前有个字典实例,你想以某个字段⽐如”⽇期”对整个字典⾥⾯的元素进⾏分组。
⽅法:
In [42]: from operator import itemgetter
In [43]: from itertools import groupby
In [44]: 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 ADDISION', 'date' : '07/02/2012'},
...: {'address' : '4801 N BROADWAY', 'date' : '07/01/2012'},
...: {'address' : '1039 W GRANVILLE', 'date' : '07/04/2012'}
...: ]
In [45]: rows.sort(key=itemgetter('date'))
groupby分组In [46]: for date, items in groupby(rows, key=itemgetter('date')):
...: print(date)
...: for i in items:
.
..: print(' ', i)
...:
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 ADDISION', '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'} 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
26
27
28
29
30
31
32
33
34
35
扩展:
实⽤groupby()函数前,必须对相应的要分组的字段进⾏排序,因为他只能对有序数据进⾏分组。如果你仅仅只是想针对⽇期进⾏分组并且允许随机获取,那可能更好的⽅法是实⽤defaultdict()先产⽣⼀个多维字典,例如:
In [48]: from collections import defaultdict
In [49]: rows_by_date = defaultdict(list)
In [50]: for row in rows:
...: rows_by_date[row['date']].append(row)
...:
In [51]: for r in rows_by_date['07/01/2012']:
...: print(r)
...:
{'address': '5412 N CLARK', 'date': '07/01/2012'}
{'address': '4801 N BROADWAY', 'date': '07/01/2012'}
对于这个例⼦,并不需要先对记录进⾏排序。因此如果不需要考虑内存,⽤这个⽅法⽐⽤groupby()要快得多。
————————————————
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论