Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例


Posted in Python onMarch 15, 2018

本文实例讲述了Python通过公共键对字典列表排序算法。分享给大家供大家参考,具体如下:

问题:想根据一个或多个字典中的值来对列表排序

解决方案:利用operator模块中的itemgetter()函数对这类结构进行排序是非常简单的。

# Sort a list of a dicts on a common key
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}
]
from operator import itemgetter
rows_by_fname = sorted(rows, key=itemgetter('fname'))
rows_by_uid = sorted(rows, key=itemgetter('uid'))
from pprint import pprint
print("Sorted by fname:")
pprint(rows_by_fname) #pprint模块的pprint()提供了打印出任何python数据结构类和方法。
print("Sorted by uid:")
pprint(rows_by_uid)
rows_by_lfname = sorted(rows, key=itemgetter('lname','fname'))
print("Sorted by lname,fname:")
pprint(rows_by_lfname)
>>> ================================ RESTART ================================
>>>
Sorted by fname:
[{'fname': 'Big', 'lname': 'Jones', 'uid': 1004},
 {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
 {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
 {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}]
Sorted by uid:
[{'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
 {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
 {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
 {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}]
Sorted by lname,fname:
[{'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
 {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
 {'fname': 'Big', 'lname': 'Jones', 'uid': 1004},
 {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003}]
>>>

补充说明:

有时候会利用lambda表达式来取代itemgetter()的功能:但是利用itemgetter()会运行的更快一些,所以考虑性能的话,应该使用itemgetter()

rows_by_fname = sorted(rows, key=lambda r:r['fname'])
rows_by_uid = sorted(rows, key=lambda r:r['uid'])

最后,本节展示的技术同样适用于min()max()这样的函数:

>>> min(rows, key=itemgetter('uid'))
{'lname': 'Cleese', 'fname': 'John', 'uid': 1001}
>>> max(rows, key=itemgetter('uid'))
{'lname': 'Jones', 'fname': 'Big', 'uid': 1004}
>>> itemgetter('uid')
<operator.itemgetter object at 0x023532F0>
>>>

(代码摘自《Python Cookbook》)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
在Python的Flask框架中实现单元测试的教程
Apr 20 Python
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
python实现图片彩色转化为素描
Jan 15 Python
python实现多层感知器MLP(基于双月数据集)
Jan 18 Python
我用Python抓取了7000 多本电子书案例详解
Mar 25 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
Django后端分离 使用element-ui文件上传方式
Jul 12 Python
matplotlib subplot绘制多个子图的方法示例
Jul 28 Python
学习Python爬虫的几点建议
Aug 05 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
浅谈Selenium 控制浏览器的常用方法
Dec 04 Python
python脚本框架webpy模板赋值实现
Nov 20 Python
python批量实现Word文件转换为PDF文件
Mar 15 #Python
python实现求解列表中元素的排列和组合问题
Mar 15 #Python
Python遍历某目录下的所有文件夹与文件路径
Mar 15 #Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
Mar 15 #Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 #Python
Centos7 Python3下安装scrapy的详细步骤
Mar 15 #Python
python实现word 2007文档转换为pdf文件
Mar 15 #Python
You might like
PHP中的串行化变量和序列化对象
2006/09/05 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
2012/12/29 PHP
php并发对MYSQL造成压力的解决方法
2013/02/21 PHP
JS保存、读取、换行、转Json报错处理方法
2013/06/14 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
动态创建script标签实现跨域资源访问的方法介绍
2014/02/28 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
SuperSlide2实现图片滚动特效
2014/06/20 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
2016/08/03 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
TensorFlow实现Batch Normalization
2018/03/08 Python
python和shell获取文本内容的方法
2018/06/05 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
Python各种扩展名区别点整理
2020/02/27 Python
医药工作岗位求职信分享
2013/12/31 职场文书
企业趣味活动方案
2014/08/21 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
房屋认购协议书
2015/01/29 职场文书
投标邀请书范本
2015/02/02 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android