Python学习教程实用技法:通过公共键对字典列表排序—itemgetter

前言:我们有一个字典列表,想根据一个或多个字典中的值对列表进行排序。

利用operator模块中的itemgetter函数对这类结构进行排序是非常简单的。

实例:

from operator import itemgetterrows=[{'name':'mark','age':18,'uid':'110'},{'name':'miaomiao','age':28,'uid':'150'},{'name':'miaomiao','age':8,'uid':'150'},{'name':'xiaohei','age':38,'uid':'130'},]rows_by_name=sorted(rows,key=itemgetter('name'))rows_by_uid=sorted(rows,key=itemgetter('uid'))print(rows_by_name)print(rows_by_uid)#itemgetter还支持多个键rows_by_name_age=sorted(rows,key=itemgetter('name','age'))print(rows_by_name_age)#itemgetter同样适用min、maxprint(min(rows,key=itemgetter('uid')))print(max(rows,key=itemgetter('age')))

运行结果:

[{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}, {'name': 'xiaohei', 'age': 38, 'uid': '130'}][{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'xiaohei', 'age': 38, 'uid': '130'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}][{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'name': 'xiaohei', 'age': 38, 'uid': '130'}]{'name': 'mark', 'age': 18, 'uid': '110'}{'name': 'xiaohei', 'age': 38, 'uid': '130'}

讨论

在这个例子中,rows被传递给内建的sorted()函数,该函数接受一个关键字参数key,这个参数应该代表一个可调用对象(callable),该对象从rows中接受一个单独的元素作为输入并返回一个用来做排序依据的值。itemgetter()函数创建的就是这样的一个可调用对象。

函数operator.itemgetter()接受的参数可作为查询的标记,用来从rows的记录中提取出所需要的值。它可以是字典的键名称、用数字表示的列表元素或是任何可以传给对象的__getitem__()方法的值。如果传多个标记给itemgetter(),那么它产生的可调用对象将返回一个包含所有元素在内的元组,然后sorted()将根据对元组的排序结果来排列输出结果。如果想同时针对多个字段做排序,那么这是非常有用的。

有时候会用lambda表达式取代itemgetter()的功能,例如:

rows_by_uid=sorted(rows,key=lambda r:r['uid'])rows_by_name_age=sorted(rows,key=lambda r:(r['name','age']))

这种解决方案通常也能正常工作。但是用itemgetter()通常会运行的更快一些。因此如果需要考虑性能问题的话,应该使用itemgetter().

欢迎大家提出宝贵的意见,更多的Python学习教程也会继续为大家更新!

python 3 字典排序_Python学习教程实用技法:通过公共键对字典列表排序—itemgetter...相关推荐

  1. Python学习教程实用技法:通过公共键对字典列表排序—itemgetter

    Python学习教程实用技法:通过公共键对字典列表排序-itemgetter 前言:我们有一个字典列表,想根据一个或多个字典中的值对列表进行排序. 利用operator模块中的itemgetter函数 ...

  2. 我学python前一句_Python学习教程:人生苦短,我用Python?入门前你要知道这些

    有多少伙伴是因为一句'人生苦短,我用Python'就要去学Python的?之前也大家更新过Python学习教程普及过多次的Python相关知识,不过大家还是还得计划一下Python学习路线!Pytho ...

  3. python资本市场财务数据分析_Python学习教程:用Python进行金融市场文本数据的情感计算...

    今天我们的Python学习教程找点财经类新闻文本数据用Python来做点简单的情感分析. 一.tushare介绍 tushare库是目前比较流行的开源免费的经济数据库,tushare有普通版和高级版, ...

  4. python的dropna函数_Python学习教程:从Excel到Python最常用的32个Pandas函数(一)

    原标题:Python学习教程:从Excel到Python最常用的32个Pandas函数(一) 本次的Python学习教程涉及pandas最常用的36个函数,通过这些函数介绍如何完成数据生成和导入.数据 ...

  5. 2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?

    2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?编程界的王者是渐落寞的Java还是大火的Python? 是不是你们也喜 ...

  6. python编程视频-【科研资源03】最全Python编程全套系统视频学习教程

    原标题:[科研资源03]最全Python编程全套系统视频学习教程 01 资源介绍 从事Python开发这么久,也了解了不少,我发现Python主要有以下四大主要应用:网络爬虫.web开发.人工智能.自 ...

  7. python编程教学视频-【科研资源03】最全Python编程全套系统视频学习教程

    原标题:[科研资源03]最全Python编程全套系统视频学习教程 01 资源介绍 从事Python开发这么久,也了解了不少,我发现Python主要有以下四大主要应用:网络爬虫.web开发.人工智能.自 ...

  8. python dict遍历_Python教程:Python数据类型之字典(附学习教程)

    字典是另一种可变容器模型,且可存储任意类型对象,是除列表以外python之中最灵活的内置数据结构类型.查找速度非常快,一个元素和10W个元素没有什么区别. 堆栈的词典 字典的无序特性和创建: 列表是有 ...

  9. python sorted下标_Python学习教程(Python学习路线):第七天-字符串和常用数据结构

    Python学习教程(Python学习路线):字符串和常用数据结构 使用字符串 第二次世界大战促使了现代电子计算机的诞生,当初的想法很简单,就是用计算机来计算导弹的弹道,因此在计算机刚刚诞生的那个年代 ...

最新文章

  1. 利用反射对应数据库字段
  2. python多进程队列性能测试
  3. 几种常用的加密方式简单介绍
  4. 汽车故障检测软件_汽车没故障,定期保养,为啥尾气检测通不过?老司机说出关键...
  5. Python解析XML文件
  6. sysdig案例分析 - 哪些文件正在被进程访问
  7. RPC框架Dubbo分析
  8. Flink UI: Flink 1.10 如何查看 数据源 的背压(反压)情况(消费kafka)
  9. Java SE (5)之 线程使用
  10. 柔性穿刺针有限元模型
  11. Linux常用查找命令
  12. stm8s单片机2位数码管显示_AT89S52单片机,实现功能两位数码管显示数字,按下
  13. Couldn't figure out the Java version of /root/.jenkins/jdk/bin/java bash: /root/.jenkins/jdk/bin/jav
  14. SVN如何建立版本库
  15. Pytorch实现Deep Mutual Learning网络
  16. 笔记本,Debian不能调整亮度
  17. ADSO中的表和视图
  18. mongodb $符号的神奇用法+mongo数据类型
  19. 最新notion enhancer安装教程(macOS Intel适用)
  20. 让机器“读懂”放射学报告

热门文章

  1. matlab计算每个细胞面积,手把手教你用 Imaris 计算细胞面积
  2. Python 序列类型支持拆包操作
  3. Python教程:通过函数名调用函数的3种场景实现
  4. 用python修改文件内容修改txt内容的3种方法
  5. python 计算两个日期相差多少个月
  6. c语言无限循环while(1)和for(;;)的区别
  7. vscode怎么用命令行打开本地项目(code .)
  8. 深度学习中的batch理解(batch size 一次喂给神经网络的数据大小量)
  9. Opencv 深度学习中为什么普遍使用BGR而不用RGB?
  10. html5 loader,7种基于GSAP的SVG Loader加载动画特效