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程序和Flask框架中使用SQLAlchemy的教程
Jun 06 Python
浅谈python新手中常见的疑惑及解答
Jun 14 Python
Python实现的基于优先等级分配糖果问题算法示例
Apr 25 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
Jan 08 Python
pyqt远程批量执行Linux命令程序的方法
Feb 14 Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 Python
python实现websocket的客户端压力测试
Jun 25 Python
wxPython实现画图板
Aug 27 Python
python实现从wind导入数据
Dec 03 Python
python文件绝对路径写法介绍(windows)
Dec 25 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
May 16 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 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中for循环语句的几种变型
2007/03/16 PHP
PHP MYSQL乱码问题,使用SET NAMES utf8校正
2009/11/30 PHP
PHP实现删除字符串中任何字符的函数
2015/08/11 PHP
php上传图片并压缩的实现方法
2015/12/22 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
jQuery制作图片旋转效果
2017/02/02 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
浅谈微信JS-SDK 微信分享接口开发(介绍版)
2018/08/15 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
Python程序员开发中常犯的10个错误
2014/07/07 Python
web.py获取上传文件名的正确方法
2014/08/26 Python
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
python绘制立方体的方法
2018/07/02 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
Python3常见函数range()用法详解
2019/12/30 Python
Python连接字符串过程详解
2020/01/06 Python
《日月潭》教学反思
2014/02/28 职场文书
门店业绩提升方案
2014/06/08 职场文书
临床专业自荐信
2014/06/22 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书