40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
# 假如我们有一个记录需要进行分组
|
||
|
||
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"},
|
||
]
|
||
|
||
# 如果我们想按日期进行分组,那itertools里的groupby会很好用
|
||
from operator import itemgetter
|
||
from itertools import groupby
|
||
|
||
# 因为groupby只能检查连续的项,所以我们先对列表进行排序
|
||
rows.sort(key=itemgetter("date"))
|
||
print(rows)
|
||
|
||
# 然后我们进行分组操作:
|
||
for date, items in groupby(rows, itemgetter("date")):
|
||
print(date)
|
||
for i in items:
|
||
print(' ', i)
|
||
# groupby每次返回的是一个值(分组名称)和一个子迭代器(组内数据)
|
||
|
||
|
||
# 当然如果是单纯的分组,一键多值字典是个好东西
|
||
from collections import defaultdict
|
||
data = defaultdict(list)
|
||
for item in rows:
|
||
data[item["date"]].append(item)
|
||
|
||
print(data)
|
||
|
||
# 在不考虑内存开销的情况下,这东西比先排序再groupby快
|
||
|