分组函数(groupby、itemgetter)
from itertools import groupby
from operator import itemgetter d1={'name':'liuyi','age':25,'city':'SZ'}
d2={'name':'chener','age':18,'city':'SH'}
d3={'name':'zhangsan','age':23,'city':'GZ'}
d4={'name':'lisi','age':24,'city':'HZ'}
d5={'name':'wangwu','age':22,'city':'BJ'}
d6={'name':'zhangliu','age':21,'city':'WH'}
lis = [d1,d2,d3,d4,d5,d6] lis.sort(key=itemgetter('city')) # 使用groupby需要先排序 lst_grou = groupby(lis,itemgetter('city')) # itemgetter('city') 相当于 key = lambda x:x['city']
for key,group in lst_grou: # group 使一个迭代器,包含了所有的分组
for g in group:
print(key,g) '''
结果
BJ {'name': 'wangwu', 'age': 22, 'city': 'BJ'}
GZ {'name': 'zhangsan', 'age': 23, 'city': 'GZ'}
HZ {'name': 'lisi', 'age': 24, 'city': 'HZ'}
SH {'name': 'chener', 'age': 18, 'city': 'SH'}
SZ {'name': 'liuyi', 'age': 25, 'city': 'SZ'}
WH {'name': 'zhangliu', 'age': 21, 'city': 'WH'}
'''
from itertools import groupby
from operator import itemgetter d1={'name':'liuyi','age':25,'city':'SZ'}
d2={'name':'chener','age':18,'city':'SH'}
d3={'name':'zhangsan','age':23,'city':'GZ'}
d4={'name':'lisi','age':24,'city':'SZ'}
d5={'name':'wangwu','age':22,'city':'BJ'}
d6={'name':'zhangliu','age':21,'city':'WH'}
lis = [d1,d2,d3,d4,d5,d6] lis.sort(key=itemgetter('city')) # 使用groupby需要先排序 lst_grou = groupby(lis,itemgetter('city')) # itemgetter('city') 相当于 key = lambda x:x['city]
print([key for key,group in lst_grou]) # 列表推导式,会自动去重 '''
结果
['BJ', 'GZ', 'SH', 'SZ', 'WH']
'''
print(dict([(key,list(group)) for key,group in lst_grou])) # 获取字典 '''
结果
{'BJ': [{'name': 'wangwu', 'age': 22, 'city': 'BJ'}],
'GZ': [{'name': 'zhangsan', 'age': 23, 'city': 'GZ'}],
'SH': [{'name': 'chener', 'age': 18, 'city': 'SH'}],
'SZ': [{'name': 'liuyi', 'age': 25, 'city': 'SZ'}, {'name': 'lisi', 'age': 24, 'city': 'SZ'}],
'WH': [{'name': 'zhangliu', 'age': 21, 'city': 'WH'}]}
'''
分组函数(groupby、itemgetter)的更多相关文章
- Atitit 数据存储的分组聚合 groupby的实现attilax总结
Atitit 数据存储的分组聚合 groupby的实现attilax总结 1. 聚合操作1 1.1. a.标量聚合 流聚合1 1.2. b.哈希聚合2 1.3. 所有的最优计划的选择都是基于现有统计 ...
- pandas聚合和分组运算——GroupBy技术(1)
数据聚合与分组运算——GroupBy技术(1),有需要的朋友可以参考下. pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作.根据一个或多个 ...
- [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)
原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...
- Pandas分组(GroupBy)
任何分组(groupby)操作都涉及原始对象的以下操作之一.它们是 - 分割对象 应用一个函数 结合的结果 在许多情况下,我们将数据分成多个集合,并在每个子集上应用一些函数.在应用函数中,可以执行以下 ...
- Oracle - 查询语句 - 分组函数
/* 分组函数 不能再select子句中出现普通的列,除非这个列在group by中给出 所有的空值都会被分为一组 分组过滤 SELECT FROM WHERE GROUPBY HAVING ORDE ...
- oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数
花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...
- Oracle_SQL函数-分组函数
分组函数 什么是分组函数 分组函数作用于一组数据,并对一组数据返回一个值 组函数类型:主要有6种 AVG - 平均 COUNT - 计数 MAX - 最大 MIN - 最小 SUM - 求和 STDD ...
- oracle 10g 学习之多表查询、分组函数(6)
笛卡尔集 l 笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 l 为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件. 自连接 select m.las ...
- 常用分组函数count-avg-sum-max-min
分组函数也称多行函数,用于对一组数据进行运算,针对一组数据(取自于多行记录的相同字段)只返回一个结果,例如计算公司全体员工的工资总和.最高工资.最低工资.各部门的员工平均工资(按部门分组)等.由于分组 ...
- ORA-00937:不是单组分组函数_Oracle
Demo: SELECT USER_ID, USER_NAME, USER_SEX, MAX(USER_AGE), SUM(USER_MONEY) AS USER_MONEY USER_TEL, US ...
随机推荐
- NativeExcel3使用示例
除了XLSReadWriteII5,还有个NativeExcel也是比较好的操作excel的组件,现将NativeExcel3的使用示例写一下,以下是代码和生成的excel表格的效果: procedu ...
- 123457123456#0#-----com.cym.shuXue02--前拼后广--开心学数学
com.cym.shuXue02--前拼后广--开心学数学
- Redis项目实战
1.显示最新的项目列表 下面这个语句常用来显示最新项目,随着数据多了,查询毫无疑问会越来越慢. SELECT * FROM foo WHERE ... ORDER BY time DESC LIMIT ...
- 《MySQL必知必会》学习笔记——前言
前言 MySQL已经成为世界上最受欢迎的数据库管理系统之一.无论是用在小型开发项目上,还是用来构建那些声名显赫的网站,MySQL都证明了自己是个稳定.可靠.快速.可信的系统,足以胜任任何数据存储业务的 ...
- Keil MDK仿真调试STM32的时候直接进入SystemInit函数
1. 仿真的时候,进入之后 2. 说是main()未定义,可是明明定义了,什么原因?喔,看错了,是--main.对比了一下和正常工厂的配置,都一样,换个jlink V9测试一下吧.换了个ST LINK ...
- jcmd的简单实用
命令jcmd 显示所有java进程id及相关信息 命令 jcmd java_pid help 显示某个java进程的所有可用命令 ➜ jobs jcmd 61185 help 61185: The f ...
- 服务发现框架选型,Consul还是Zookeeper还是etcd
背景 本文并不介绍服务发现的基本原理.除了一致性算法之外,其他并没有太多高深的算法,网上的资料很容易让大家明白上面是服务发现. 想直接查看结论的同学,请直接跳到文末. 目前,市面上有非常多的服务发现工 ...
- C++STL位标志、智能指针与异常处理
参考<21天学通C++>第25章节,对STL位标志进行介绍.就是当需要不是像char int long 等整个字节数的数据表示形式,而是使用二进制位表示的时候,通常使用这里讲到的位标志.从 ...
- 19-js策略模式
var PriceStrategy = function() { var stragtegy = { return30: function(price) { return +price + parse ...
- Prometheus入门到放弃(2)之Node_export安装部署
1.下载安装 node_exporter服务需要在三台机器都安装,这里我们以一台机器为例: 地址:https://prometheus.io/download/ ### 另外两个节点部署时,需要先创建 ...