itemgetter和groupby
一. itemgetter的使用方法
itemgetter()返回一个指定列表下标或者字典键的函数,通过这个返回的函数作用到对象上,获得才能取得相应的值
1. 排序字典列表的一个例子
from operator import itemgetter
rows = [
{'fname': 'Brian', 'lname': 'Jones', 'uid': },
{'fname': 'David', 'lname': 'Beazley', 'uid': },
{'fname': 'John', 'lname': 'Cleese', 'uid': },
{'fname': 'Big', 'lname': 'Jones', 'uid': }
] #按名来排序
rows_by_fname = sorted(rows, key=itemgetter('fname')) #按UID排序
rows_by_uid = sorted(rows, key=itemgetter('uid')) #也支持按多个条件排序
rows_by_flname = sorted(rows, key=itemgetter('fname', lname'))
2. itemgetter在一般列表中的用法
>>> from operator import itemgetter
>>> a = [,,,]
>>> x = itemgetter()
>>> x(a) >>> y = itemgetter(,)
>>> y(a)
(, )
3. itemgetter在元组中的用法,其中key为一个函数或者lambda函数,所以itemgetter可以用来当key的参数
>>> a = [('john', 'A', ), ('jane', 'B', ), ('dave', 'B', )]
#按第二个域和第三个域进行排序
>>> sorted(a, key=itemgetter(,))
[('john', 'A', ), ('dave', 'B', ), ('jane', 'B', )]
#按第三个域方向排序
>>> sorted(a, key=itemgetter(), reverse=True)
[('john', 'A', ), ('jane', 'B', ), ('dave', 'B', )]
二. 使用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
# Sort by the desired field first
rows.sort(key=itemgetter('date'))
# Iterate in groups
for date, items in groupby(rows, key=itemgetter('date')):
print(date)
for i in items:
print(' ', i)
输出结果如下
//
{'date': '07/01/2012', 'address': '5412 N CLARK'}
{'date': '07/01/2012', 'address': '4801 N BROADWAY'}
//
{'date': '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/03/2012', 'address': '2122 N CLARK'}
//
{'date': '07/04/2012', 'address': '5148 N CLARK'}
{'date': '07/04/2012', 'address': '1039 W GRANVILLE'}
itemgetter和groupby的更多相关文章
- [PY3]——根据某个特定的字段来分组迭代访问一个字段或序列?/ itertools.groupby( )函数
问题 你有一个字典或者实例的序列,然后你想根据某个特定的字段(比如‘date’)来分组迭代访问. 解决方案 itertools.groupby( )函数 itertools.groupby(rows, ...
- itertools.groupby()分组字典列表
## itertools.groupby()分组字典列表数据 from operator import itemgetter from itertools import groupby student ...
- PYTHON-进阶-ITERTOOLS模块
PYTHON-进阶-ITERTOOLS模块小结 这货很强大, 必须掌握 文档 链接 pymotw 链接 基本是基于文档的翻译和补充,相当于翻译了 itertools用于高效循环的迭代函数集合 组成 总 ...
- Python itertools模块详解
这货很强大, 必须掌握 文档 链接 http://docs.python.org/2/library/itertools.html pymotw 链接 http://pymotw.com/2/iter ...
- 高效的 itertools 模块(转)
原文地址:http://python.jobbole.com/87380/ 我们知道,迭代器的特点是:惰性求值(Lazy evaluation),即只有当迭代至某个值时,它才会被计算,这个特点使得迭代 ...
- 【译】itertools
1.Itertools模块迭代器的种类 1.1 无限迭代器: 迭代器 参数 结果 示例 count() start, [step] start, start+step, start+2*step, ...
- PYTHON__ ITERTOOLS模块
组成 总体,整体了解 无限迭代器 迭代器 参数 结果 例子 count() start, [step] start, start+step, start+2*step, ... count(10) - ...
- Python - 标准库部分函数、类的大致实现(持续更新)
all() def all(iterable): for element in iterbale: if not element: return False return True any() def ...
- 分组函数(groupby、itemgetter)
from itertools import groupby from operator import itemgetter d1={'name':'liuyi','age':25,'city':'SZ ...
随机推荐
- 给mysql数据添加一个只拥有一张表的权限
grant all privileges on [database].* to 'database'@'localhost' identified by 'password' 例如: grant al ...
- canvas动画--demo
canvas动画:bubble
- 搭建双系统win10+ubuntu17.10
0. 序言 这里采用先装win10,再装ubuntu的顺序.这样可以避免后面系统启动项设置的问题.都采用UEFI引导方式,且使用usb2.0的u盘来引导(3.0的话,要准备好3.0的驱动).另外注意的 ...
- 12. Integer to Roman (HashTable)
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...
- 单源最短路:Bellman-Ford算法 及 证明
描述: 求图中某一点到其他任一点的最短距离. 操作: 1. 初始化 结果保存在一个dist数组里,源点的结果初始化为0,其他初始化为无穷大(如INT32_MAX). 2. 计算: 两重for循环,第一 ...
- Golang学习系列:(一)介绍和安装
Golang学习系列:(一)介绍和安装 Java程序员带你来到Go的世界,让我们开始探索吧! Go是一种新的语言,一种并发的,带有垃圾回收的.快速编译的语言,它具有一下特点: 他可以在一台计算机上用几 ...
- Java 中的类
public class Test{ public static void main(String[] args){ Animal a1 = new Dog(); a1.shout();//编译通过 ...
- npm 更改为淘宝镜像的方法
1.命令行临时使用指定镜像(淘宝) npm --registry https://registry.npm.taobao.org install express 2.命令行永久更改使用指定镜像(淘宝) ...
- Java 设计模式系列(六)适配器模式
Java 设计模式系列(六)适配器模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的结构: 类的适配器模式 对象 ...
- docker跨主机互联
以下内容只是命令,原理自行百度,google或者官方查阅! 方案一.overlay Consul 三台主机为例(都要安装docker): 192.168.20.20(consul服务) 192.168 ...