Python groupby:连续分组与排序

itertools.groupby按照连续相同的键分组,并不会自动把整份数据中同键的记录聚到一起。看到A、B、A分成三组,通常是输入顺序与预期用途没有对齐。

浅色表格和整理中的数据卡片
浅色主题概念配图,选自本站AI生成图库;非事件现场或产品实测截图。

先区分连续片段与全局分组

分析状态变化时,保留顺序得到A一段、B一段、A又一段可能正是需要的结果。如果目标是把所有A放在一起,可先按相同键排序。排序会改变原先的时间顺序,因此必须先明确问题。

需要留存的组立即转成列表

groupby产生的组迭代器共享底层输入。外层继续向前后,不能指望旧组还能完整读取。示例在循环内部立刻list(group),这样后续查看的是已经保存的内容。

用最小反例解释差异

下例同时检查原顺序与排序后结果,避免只用AAA、BBB这种天然相邻数据测试。真实记录若按某个字段分组,排序和groupby要使用一致的key函数。这里演示标准库,不等同于数据库的全局聚合。

可以运行的练习

from itertools import groupby
items = ["A", "B", "A"]
runs = [(key, list(group)) for key, group in groupby(items)]
merged = [(key, list(group)) for key, group in groupby(sorted(items))]
assert runs == [("A", ["A"]), ("B", ["B"]), ("A", ["A"])]
assert merged == [("A", ["A", "A"]), ("B", ["B"])]
print(runs)
print(merged)

示例已在本地隔离环境运行检查。使用固定输入,不访问外部接口,也不读取真实业务文件。

资料与继续学习

Python:itertools.groupby。资料查阅日期:2026年10月3日。步骤与练习由本站整理。

资料查阅与编辑日期:2026年10月3日。作者:玖柒。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享