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 相关文章推荐
Tornado服务器中绑定域名、虚拟主机的方法
Aug 22 Python
对Python中的@classmethod用法详解
Apr 21 Python
对python-3-print重定向输出的几种方法总结
May 11 Python
Python基于最小二乘法实现曲线拟合示例
Jun 14 Python
numpy下的flatten()函数用法详解
May 27 Python
python傅里叶变换FFT绘制频谱图
Jul 19 Python
python使用if语句实现一个猜拳游戏详解
Aug 27 Python
使用 Python 遍历目录树的方法
Feb 29 Python
Python识别验证码的实现示例
Sep 30 Python
python使用ctypes库调用DLL动态链接库
Oct 22 Python
python实现跨年表白神器--你值得拥有
Jan 04 Python
Python第三方库安装缓慢的解决方法
Feb 06 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
PHP pathinfo()获得文件的路径、名称等信息说明
2011/09/13 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
实例讲解PHP验证邮箱是否合格
2019/01/28 PHP
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
基于jquery封装的一个js分页
2011/11/15 Javascript
js中数组Array的一些常用方法总结
2013/08/12 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
jQuery和hwSlider实现内容响应式可触控滑动切换效果附源码下载(二)
2016/06/22 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
three.js 入门案例详解
2018/01/23 Javascript
JavaScript面向对象中接口实现方法详解
2019/07/24 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
Python脚本实现虾米网签到功能
2016/04/12 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
python matplotlib拟合直线的实现
2019/11/19 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
python操作ini类型配置文件的实例教程
2020/10/30 Python
HTML5 Video/Audio播放本地文件示例介绍
2013/11/18 HTML / CSS
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
大学毕业生通用自荐信范文
2013/10/31 职场文书
个人素质的自我评价分享
2013/12/16 职场文书
销售行政专员职责
2014/01/03 职场文书
蜗居观后感
2015/06/11 职场文书
小学体育组工作总结2015
2015/07/21 职场文书
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python