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面相对象编程中对象的属性与类的方法
Jan 19 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
Jun 07 Python
详解Python中的相对导入和绝对导入
Jan 06 Python
PyCharm在win10的64位系统安装实例
Nov 26 Python
Django处理文件上传File Uploads的实例
May 28 Python
Python使用matplotlib绘制随机漫步图
Aug 27 Python
python简单区块链模拟详解
Jul 03 Python
Python 使用元类type创建类对象常见应用详解
Oct 17 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 Python
python APScheduler执行定时任务介绍
Apr 19 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
thinkphp微信开发(消息加密解密)
2015/12/02 PHP
PHP解析url并得到url参数方法总结
2018/10/11 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
jQuery中toggle()函数的使用实例
2015/04/17 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
探究JavaScript中的五种事件处理程序方式
2016/12/07 Javascript
jquery validation验证表单插件
2017/01/07 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
Node.js如何实现注册邮箱激活功能 (常见)
2017/07/23 Javascript
详解关于react-redux中的connect用法介绍及原理解析
2017/09/11 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
vscode下的vue文件格式化问题
2018/11/28 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
Django中create和save方法的不同
2019/08/13 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
企业爱岗敬业演讲稿
2014/09/04 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
个人委托书怎么写
2014/09/17 职场文书
2015年党小组工作总结
2015/05/26 职场文书
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL