Python: 字典列表: itemgetter 函数: 根据某个或某几个字典字段来排序列表
问题:根据某个或某几个字典字段来排序Python列表
answer: 通过使用operator 模块的itemgetter 函数,可以非常容易的排序这样的数据结构
eg:
rows = [
{'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
{'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
{'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
{'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
]
1.itemgetter()
from operator import itemgetter
1).print(rows_by_fname)
>>>rows_by_fname = sorted(rows, key=itemgetter('fname'))
>>>print(rows_by_fname)
[{'fname': 'Big', 'uid': 1004, 'lname': 'Jones'},
{'fname': 'Brian', 'uid': 1003, 'lname': 'Jones'},
{'fname': 'David', 'uid': 1002, 'lname': 'Beazley'},
{'fname': 'John', 'uid': 1001, 'lname': 'Cleese'}]
2).print(rows_by_uid)
>>>rows_by_uid = sorted(rows, key=itemgetter('uid'))
>>>print(rows_by_uid)
[{'fname': 'John', 'uid': 1001, 'lname': 'Cleese'},
{'fname': 'David', 'uid': 1002, 'lname': 'Beazley'},
{'fname': 'Brian', 'uid': 1003, 'lname': 'Jones'},
{'fname': 'Big', 'uid': 1004, 'lname': 'Jones'}]
3).itemgetter() 函数也支持多个keys
itemgetter() 函数也支持多个keys,比如下面的代码
>>>rows_by_lfname = sorted(rows, key=itemgetter('lname','fname'))
>>>print(rows_by_lfname)
[{'fname': 'David', 'uid': 1002, 'lname': 'Beazley'},
{'fname': 'John', 'uid': 1001, 'lname': 'Cleese'},
{'fname': 'Big', 'uid': 1004, 'lname': 'Jones'},
{'fname': 'Brian', 'uid': 1003, 'lname': 'Jones'}]
在上面例子中,rows被传递给接受一个关键字参数的sorted()内置函数。
这个参数是callable类型,并且从rows中接受一个单一元素,然后返回被用来排序的值。
itemgetter()就是负责创建这个callable对象的。
如果传多个参数给itemgetter(),它生成的callabe对象会返回一个包含所有值的元组,sort()函数会根据元组中元素顺序去排序。
2.lambda表达式
itemgetter()有时候可以用lambda表达式代替
rows_by_fname = sorted(rows, key=lambda r: r['fname'])
rows_by_lfname = sorted(rows, key=lambda r: (r['lname'],r['fname']))
这种方案也不错。但是,使用itemgetter() 方式会运行的稍微快点。因此,如果
你对性能要求比较高的话就使用itemgetter() 方式。
3.min(),max()
最后,不要忘了这节中展示的技术也同样适用于min() 和max() 等函数。比如:
>>> min(rows, key=itemgetter('uid'))
{'fname': 'John', 'lname': 'Cleese', 'uid': 1001}
>>> max(rows, key=itemgetter('uid'))
{'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
Python: 字典列表: itemgetter 函数: 根据某个或某几个字典字段来排序列表的更多相关文章
- Python的operator.itemgetter函数和sorted函数
写这篇文章的目的是之前在<机器学习实战>用Python3实现KNN算法时用到的几个函数不太懂, 地址: 1- https://github.com/hitergelei/Self-Lear ...
- python中operator.itemgetter函数
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. k = [,,] b = ) print(b(k)) #输 ...
- Python笔记(二):列表+列表数据处理+函数
#才疏学浅,难免有不恰当之处,请不吝指正,谢谢. #适合初学者. 列表的数据自下而上堆放(形成一个堆栈),类似于其他编程语言的数组.例如: user = ["张三","李 ...
- python之itemgetter函数:对字典列表进行多键排序
itemgetter函数:对字典列表进行多键排序 from operator import itemgetter list_people = [ {'name': 'Mike', 'age': 22, ...
- python中列表和字典常用方法和函数
Python列表函数&方法 Python包含以下函数: 序号 函数 1 cmp(list1, list2)比较两个列表的元素 2 len(list)列表元素个数 3 max(list)返回列表 ...
- Python的字符串和列表和字典的方法/函数
字符串 S.find()#可指定范围查找字串,返回索引值,否则返回-1 S.index()#同find,只是找不到的之后返回异常 S.count()#返回找到字串的个数 S.lower()#转小写 S ...
- python 小技巧(glob,guid,序列化,压缩字符,有序字典,sorted函数,分片)
1.glob模块 glob模块是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多.查找文件只用到三个匹配符:”*”, “?”, “[]”.”* ...
- Python基础学习笔记(八)常用字典内置函数和方法
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-dictionary.html 3. http://www.lia ...
- python之列表作为函数的参数
函数参数为 列表或者字典 传递一个列表,例如 [1, 2, 3] 将此传给函数get_sum() 求出 各个元素之和 传递一个字典,打印出key/value的对应关系表: #!/usr/bin/env ...
随机推荐
- Java虚拟机六 堆溢出的处理
在Java程序中,如果堆空间不足,有可能抛出内存溢出错误:Out Of Memory,简称OOM. Exception in thread "main" java.lang.Out ...
- Xcode - 打开工程,提示No Scheme解决
错误提示,如图: 解决思路:
- JSPatch - 基本使用和学习
介绍 JSPatch是2015年由bang推出的能实现热修复的工具,只要在项目中引入极小的JSPatch引擎,就可以用 JavaScript 调用和替换任何 Objective-C 的原生方法,获得脚 ...
- Windows Server 2008 R2之二从介质安装 AD DS
可以使用 Ntdsutil.exe 为在域中创建的其他域控制器创建安装介质.通过从介质安装,可以最大程度地减少网络上目录数据的复制.有利于在远程站点中更高效地安装其他域控制器. 实验环境: 在Wind ...
- POJ-2353 Ministry(动态规划)
Ministry Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4761 Accepted: 1528 Special Judg ...
- Oracle管理监控之如何对数据库进行监控检查
oracle自动工作负载库(AWR):采集与性能相关的统计数据,并从统计的数据中导出性能量度,以跟踪数据库潜在的问题. 如何生成oracle数据库的自动负载库报告. 手工生成一份oracle数据库的快 ...
- lamp docker apache2 supervisor monitor
sudo docker run -d -p 80:80 -p 3306:3306 -v /data/lampp/supervisormonitor:/app --name mylamp01 tutum ...
- vue.js个人学习心得
2017.4.7开始辞职刚好一个月时间,一个月时间里我开始彷徨,迷惘,失业带来的痛苦,打算转行,不再搞机械行业,因为不想再做低端的产品设计(本身不是研究生也不是说天资卓越,只是不甘于平凡). 好了,不 ...
- ViewPager的OnPageChangeListener三个回调解析
一个native crash最后是重写ViewPager解决的,过程中发现这三个回调还有点绕,于是理了一下 ViewPager有两个操作,一个是用手指滑动翻页,一个是直接setCurrentItem( ...
- LeetCode-206.ReverseLinked List
Reverse a singly linked list. Example: Input: 1->2->3->4->5->NULL Output: 5->4-> ...