Python cookbook(数据结构与算法)根据字段将记录分组操作示例


Posted in Python onMarch 19, 2018

本文实例讲述了Python根据字段将记录分组操作。分享给大家供大家参考,具体如下:

问题:想根据字典或者对象实例的某个特定的字典(比如日期)来分组迭代数据

解决方案:itertools.groupby()函数在对数据进行分组时特别有用(前提是先以目标字典进行排序)

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'},
]
from operator import itemgetter
from itertools import groupby
rows.sort(key=itemgetter('date')) #首先以date字段进行排序
for date, items in groupby(rows, key=itemgetter('date')): #再以date进行分组
  print(date)
  for i in items:
    print('  ', i)
# 如果只是简单地根据日期将数据分组到一起,放进一个大的数据结构中以允许进行随机访问,那么可以利用defaultdict构建一个一键多值的字典会更好
#Example of building a multidict
from collections import defaultdict
rows_by_date = defaultdict(list) #创建一个一键多值的字典,
for row in rows:
  rows_by_date[row['date']].append(row)
for r in rows_by_date['07/01/2012']:
  print(r)

运行结果:

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 ADDISON', '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'}
{'address': '5412 N CLARK', 'date': '07/01/2012'}
{'address': '4801 N BROADWAY', 'date': '07/01/2012'}

(代码摘自《Python Cookbook》)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python中实现定制类的特殊方法总结
Sep 28 Python
约瑟夫问题的Python和C++求解方法
Aug 20 Python
Python实现各种排序算法的代码示例总结
Dec 11 Python
Python优化技巧之利用ctypes提高执行速度
Sep 11 Python
Python SqlAlchemy动态添加数据表字段实例解析
Feb 07 Python
python如何读写json数据
Mar 21 Python
详解通过API管理或定制开发ECS实例
Sep 30 Python
python滑块验证码的破解实现
Nov 10 Python
3种python调用其他脚本的方法
Jan 06 Python
python如何求数组连续最大和的示例代码
Feb 04 Python
pandas中DataFrame重置索引的几种方法
May 24 Python
python turtle绘图
May 04 Python
遗传算法python版
Mar 19 #Python
python实现简单遗传算法
Mar 19 #Python
python psutil库安装教程
Mar 19 #Python
Python递归实现汉诺塔算法示例
Mar 19 #Python
Python实现替换文件中指定内容的方法
Mar 19 #Python
python书籍信息爬虫实例
Mar 19 #Python
python中字符串比较使用is、==和cmp()总结
Mar 18 #Python
You might like
mysq GBKl乱码
2006/11/28 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
php集成动态口令认证
2016/07/21 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
jQuery中nextAll()方法用法实例
2015/01/07 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
Django发送html邮件的方法
2015/05/26 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
详解python中各种文件打开模式
2020/01/19 Python
python pptx复制指定页的ppt教程
2020/02/14 Python
python文件及目录操作代码汇总
2020/07/08 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
python3中celery异步框架简单使用+守护进程方式启动
2021/01/20 Python
Python爬虫爬取ts碎片视频+验证码登录功能
2021/02/22 Python
CSS3动画效果回调处理详解
2014/12/10 HTML / CSS
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
物业管理计划书
2014/01/10 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
本科生导师推荐信范文
2014/05/18 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
投诉书格式范本
2015/07/02 职场文书