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 strip lstrip rstrip使用方法
Sep 06 Python
Python实现以时间换空间的缓存替换算法
Feb 19 Python
python实现unicode转中文及转换默认编码的方法
Apr 29 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
Python机器学习之决策树算法
Dec 22 Python
django 多对多表的创建和插入代码实现
Sep 09 Python
Python OpenCV实现测量图片物体宽度
May 27 Python
python中的错误如何查看
Jul 08 Python
pycharm如何使用anaconda中的各种包(操作步骤)
Jul 31 Python
python 常见的排序算法实现汇总
Aug 21 Python
深入理解python多线程编程
Apr 18 Python
python tkinter Entry控件的焦点移动操作
May 22 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 中检查或过滤IP地址的实现代码
2011/11/27 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
php生成微信红包数组的方法
2019/09/05 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
javascript调试说明
2010/06/07 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
原生JS可拖动弹窗效果实例代码
2013/11/09 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
2014/03/18 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
微信小程序 MD5的方法详解及实例代码
2017/03/10 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
2017/07/27 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
Python使用爬虫猜密码
2016/02/19 Python
python八皇后问题的解决方法
2018/09/27 Python
python将一组数分成每3个一组的实例
2018/11/14 Python
在numpy矩阵中令小于0的元素改为0的实例
2019/01/26 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
Python实现自动整理文件的脚本
2020/12/17 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
设计师大码女装:11 Honoré
2020/05/03 全球购物
四年的个人工作自我评价
2013/12/10 职场文书
好军嫂事迹材料
2014/01/15 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
设计专业毕业生求职信
2014/06/25 职场文书
2014年技术员工作总结
2014/11/18 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
李强感恩观后感
2015/06/17 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
python中的3种定义类方法
2021/11/27 Python
MySQL学习必备条件查询数据
2022/03/25 MySQL