2025-09-10:仓库迁移
This commit is contained in:
39
1.数据结构与算法/15.根据字段分组.py
Normal file
39
1.数据结构与算法/15.根据字段分组.py
Normal file
@@ -0,0 +1,39 @@
|
||||
# 假如我们有一个记录需要进行分组
|
||||
|
||||
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快
|
||||
|
Reference in New Issue
Block a user