Python实用黑科技——以某个字段进行分组
来源:互联网 发布:掌灸通知乎 编辑:程序博客网 时间:2024/04/29 17:16
需求:
当前有个字典实例,你想以某个字段比如”日期”对整个字典里面的元素进行分组。
方法:
itertools.groupby()函数是专门用来干这个活的。请看下面这个例子,这里有一个列表构成的字典,你想按照日期来对列表进行分组,可以这么做:
In [42]: from operator import itemgetterIn [43]: from itertools import groupbyIn [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'))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'}
扩展:
实用groupby()函数前,必须对相应的要分组的字段进行排序,因为他只能对有序数据进行分组。如果你仅仅只是想针对日期进行分组并且允许随机获取,那可能更好的方法是实用defaultdict()先产生一个多维字典,例如:
In [48]: from collections import defaultdictIn [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()要快得多。
阅读全文
0 0
- Python实用黑科技——以某个字段进行分组
- Python实用黑科技——总汇
- Python实用黑科技——解包元素(1)
- Python实用黑科技——解包元素(2)
- Python实用黑科技——找出最大/最小的n个元素
- Python实用黑科技——找出序列里面出现次数最多的元素
- python通过某个字段将记录分组
- 使用函数分组对某个字段进行字符串的累加
- list集如何以某个字段对list进行排序
- 按表中的某个字段分组进行查询,其它字段只统计个数
- Javascript实用黑科技45条
- python--re模块--黑科技
- C++——include<黑科技>
- Python 针对Json中某个关键字段进行排序
- 【java】将List中的实体按照某个字段进行分组的算法
- 将List中的实体按照某个字段进行分组的算法
- 【java】将List中的实体按照某个字段进行分组的算法
- 将List中的实体按照某个字段进行分组的算法
- ubuntu16.04虚拟机装opencv3.2.0 遇到的坑,梳理
- Bloom Filter概念和原理 (总结8)
- Android存储
- Lua_ uLua协程_021
- 仅用递归函数和栈操作逆序一个栈
- Python实用黑科技——以某个字段进行分组
- ZYNQ PL和PS通过BRAM交互共享数据
- POJ 1330 Nearest Common Ancestors(LCA 在线算法)
- centos7
- Hhase性能调优 (总结9)
- java--List
- ajax获取返回值
- 高并发处理【电商抢购】
- 青蛙跳台阶问题