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使用smtp和pop简单收发邮件完整实例
Jan 09 Python
python如何对实例属性进行类型检查
Mar 20 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 Python
使用Python进行目录的对比方法
Nov 01 Python
对python 多个分隔符split 的实例详解
Dec 20 Python
Python自定义函数计算给定日期是该年第几天的方法示例
May 30 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
Django认证系统user对象实现过程解析
Mar 02 Python
python为QT程序添加图标的方法详解
Mar 09 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
Apr 21 Python
浅谈Python 中的复数问题
May 19 Python
python高温预警数据获取实例
Jul 23 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(三)
2012/03/22 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
2015/09/06 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
jQuery实现可编辑的表格
2019/12/11 jQuery
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
Django实现登录随机验证码的示例代码
2018/06/20 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
2020/03/24 Python
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
屈臣氏俄罗斯在线商店:Watsons俄罗斯
2020/08/03 全球购物
《匆匆》教学反思
2014/02/22 职场文书
高中军训感言1000字
2014/03/01 职场文书
2015年党员自我剖析材料
2014/12/17 职场文书
高三英语复习计划
2015/01/19 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android