itertools.groupby()分组字典列表
## itertools.groupby()分组字典列表数据
- from operator import itemgetter
- from itertools import groupby
- students = [
- {'name': 'Peter', 'age': 19, 'score': 95},
- {'name': 'Lily', 'age': 22, 'score': 90},
- {'name': 'Stanley', 'age': 22, 'score': 92},
- {'name': 'Bob', 'age': 20, 'score': 88},
- {'name': 'Well', 'age': 20, 'score': 82}
- ]
- for key, group in groupby(sorted(students, key=itemgetter("age")), key=itemgetter("age")):
- # groupby()函数同时返回分组关键字和一个与关键字相对应的可迭代对象
- # itemgetter()同样可以接收多个关键字,也可以使用匿名函数代替此函数,但速度相比之下较慢
- print("Age: %s" % key)
- for g in group:
- print(g)
- """
- Age: 19
- {'name': 'Peter', 'age': 19, 'score': 95}
- Age: 20
- {'name': 'Bob', 'age': 20, 'score': 88}
- {'name': 'Well', 'age': 20, 'score': 82}
- Age: 22
- {'name': 'Lily', 'age': 22, 'score': 90}
- {'name': 'Stanley', 'age': 22, 'score': 92}
- """
- # 也可以使用defaultdict()创建一个一对多字典方便进行随机访问
- from collections import defaultdict
- students_by_age = defaultdict(list)
- for key, group in groupby(sorted(students, key=itemgetter("age")), key=itemgetter("age")):
- for i in group:
- students_by_age[key].append(i)
- print(list(students_by_age[22]))
- # [{'name': 'Lily', 'age': 22, 'score': 90}, {'name': 'Stanley', 'age': 22, 'score': 92}]
参考资料:
Python Cookbook, 3rd edition, by David Beazley and Brian K. Jones (O’Reilly).
itertools.groupby()分组字典列表的更多相关文章
- Python中itertools.groupby分组的使用
Python中itertools.groupby分组的使用 有时候我们需要给一个列表按照某个属性分组,可以借助groupby来实现. 比如:一下列表我想以严重程度给它分组,并求出每组的元素个数. fr ...
- Python: 字典列表: 通过某个字段将记录分组
问题:有一个字典或者实例的序列,想根据某个特定的字段比如date 来分组迭代访问. answer: itertools.groupby函数对于这样的数据分组操作非常实用 eg: rows = [{'a ...
- [PY3]——根据某个特定的字段来分组迭代访问一个字段或序列?/ itertools.groupby( )函数
问题 你有一个字典或者实例的序列,然后你想根据某个特定的字段(比如‘date’)来分组迭代访问. 解决方案 itertools.groupby( )函数 itertools.groupby(rows, ...
- pandas之groupby分组与pivot_table透视
一.groupby 类似excel的数据透视表,一般是按照行进行分组,使用方法如下. df.groupby(by=None, axis=0, level=None, as_index=True, so ...
- itertools.groupby()/itertools.compress() 笔记
关于itertools.groupby() itertools.groupby()就是将相邻的并且相同的键值划分为同一组,相似功能可以看https://docs.python.org/3/librar ...
- 利用itertools生成密码字典,多线程撞库破解rar压缩文件密码
脚本功能: 利用itertools生成密码字典(迭代器形式) 多线程并发从密码字典中取出密码进行验证 验证成功后把密码写入文件中保存 #!/usr/bin/env python # -*- codin ...
- C# Linq及Lamda表达式实战应用之 GroupBy 分组统计
在项目中做统计图表的时候,需要对查询出来的列表数据进行分组统计,首先想到的是避免频繁去操作数据库可以使用 Linq eg: //例如对列表中的Cu元素进行按年GroupBy分组统计 //包含年份,平均 ...
- pandas之groupby分组与pivot_table透视表
zhuanzi: https://blog.csdn.net/qq_33689414/article/details/78973267 pandas之groupby分组与pivot_table透视表 ...
- c# Linq及Lamda表达式应用经验之 GroupBy 分组
示例1: GroupBy 分组在List<>泛型中的应用 原表: 按姓名Nam 分组后结果: 对DATATABLE 进行LAMDA查询时必须在项目的引用中添加 System.Data.Da ...
随机推荐
- [MFC]选择目录对话框和选择文件对话框
在MFC编程中经常会需要用到选择目录和选择文件的界面,以下总结一下本人常用的这两种对话框的生成方法: 选择目录对话框 //选择目录按钮void CDcPackerDlg::OnBnClickedDec ...
- JIAVA知识点整理
Java具有垃圾回收机制,程序退出之后,使用的所有内存全部都将被释放,如要保存数据你就要建立文件,因为当保存时是保存在运行内存中的. int 有返回值void 不需要返回值 1.判断语句if else ...
- Tomcat启动阻塞变慢
Tomcat 熵池阻塞变慢详解 Tomcat 启动很慢,且日志上无任何错误,在日志中查看到如下信息: Log4j:[2015-10-29 15:47:11] INFO ReadProperty:172 ...
- npm install warning: no description; no repository field
npm install 报错:warning no description; no repository field 开始以为必须npm init,npm init在git bash(win7)里,还 ...
- Wpf 系列
http://www.cnblogs.com/chillsrc/category/684419.html
- dbms_randon package
reference to wbsite:http://zhangzhongjie.iteye.com/blog/1948930#comments DBMS_RANDON PACKAGE: Define ...
- Grunt 使用(一)基础搭建
jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用!废话不多说,直接上干货. 1.安装node.js并检查node -v 和 n ...
- ZT SAFE_DELETE
SAFE_DELETE 分类: c/C++ 2008-10-14 14:26 706人阅读 评论(2) 收藏 举报 delete文本编辑nullflash破解加密 我发现学程序大家差不多都有相似的地方 ...
- 初窥IM通信协议
即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传输协议. 前者是以数据流的形式,将传输数 ...
- [转] Java 命名规范
定义规范的目的是为了使项目的代码样式统一,使程序有良好的可读性. 包的命名 (全部小写,由域名定义) Java包的名字都是由小写单词组成.但是由于Java面向对象编程的特性,每一名Java程序员都 ...