Python中字典(dict)和列表(list)的排序方法实例


Posted in Python onJune 16, 2014

一、对列表(list)进行排序

推荐的排序方式是使用内建的sort()方法,速度最快而且属于稳定排序

>>> a = [1,9,3,7,2,0,5]
>>> a.sort()
>>> print a
[0, 1, 2, 3, 5, 7, 9]
>>> a.sort(reverse=True)
>>> print a
[9, 7, 5, 3, 2, 1, 0]
>>> b = ['e','a','be','ad','dab','dbc']
>>> b.sort()
>>> print b
['a', 'ad', 'be', 'dab', 'dbc', 'e']

对列表的排序是遵循DSU(decorate-sort-undecorate)模式的,序列是安装条目的顺序进行比较的,对刚刚例子中的字符串来说,就是按照从左到右的顺序,逐个字符进行比较,一旦得出结果就停止比较。

二、对字典(dict)进行排序

其实字典(dict)是一个无序序列,谈不上排序,我们只能按照字典的键/值进行排序,然后让对应值/键也处于同样的顺序
任何对字典的排序问题,都要最终归结为对字典(dict)的键(key)或者值(value)组成的列表(list)的排序

1、按字典(dict)的键进行排序[1]

def sortedDictValues(adict,reverse=False):
 keys = adict.keys()
 keys.sort(reverse=reverse)
 return [adict[key] for key in keys]

如果需要同时返回键和值的话,之用将最后的return语句改为:
return [(key,adict[key]]) for key in keys]

还有一种书写简单的方法,就是使用内置的sorted()方法进行排序:
>>> d = {'c':1,'e':'5','b':7}
>>> sorted(d.items())
[('b', 7), ('c', 1), ('e', '5')]

不过性能会有些许的下降,如果很苛求性能,还是使用原生对list.sort()方法比较好

2、按字典(dict)的值进行排序[2]

def sorted_dict(container, keys, reverse):
 """返回 keys 的列表,根据container中对应的值排序"""
 aux = [ (container[k], k) for k in keys]
 aux.sort()
 if reverse: aux.reverse()
 return [k for v, k in aux]

同样可以用sorted()方法实现同样的功能:
sorted(d.items(), key=lambda d:d[1], reverse=True)

三、结语

通过以上代码的分析,大致总结处以下几条原则:
* 对字典的排序,最终都要归结为对字典的键或者值组成的列表的排序
* 对列表的排序,优先使用内置的list.sort()方法

Python 相关文章推荐
python smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
Python中类型关系和继承关系实例详解
May 25 Python
Python实现简单截取中文字符串的方法
Jun 15 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
Nov 13 Python
python调用opencv实现猫脸检测功能
Jan 15 Python
python自定义函数实现一个数的三次方计算方法
Jan 20 Python
Python创建或生成列表的操作方法
Jun 19 Python
python-django中的APPEND_SLASH实现方法
Jun 21 Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 Python
Python Sphinx使用实例及问题解决
Jan 17 Python
Python自定义sorted排序实现方法详解
Sep 18 Python
Python初识逻辑与if语句及用法大全
Aug 07 Python
Python实现的几个常用排序算法实例
Jun 16 #Python
Python中文件遍历的两种方法
Jun 16 #Python
Python里隐藏的“禅”
Jun 16 #Python
Python程序设计入门(5)类的使用简介
Jun 16 #Python
Python程序设计入门(4)模块和包
Jun 16 #Python
Python程序设计入门(3)数组的使用
Jun 16 #Python
Python程序设计入门(2)变量类型简介
Jun 16 #Python
You might like
PHP实现Soap通讯的方法
2014/11/03 PHP
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
js创建一个input数组并绑定click事件的方法
2014/06/12 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
jquery+css实现动感的图片切换效果
2015/11/25 Javascript
JS之相等操作符详解
2016/09/13 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
通过button将form表单的数据提交到action层的实例
2017/09/08 Javascript
JavaScript实现表单注册、表单验证、运算符功能
2018/10/15 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
7个好用的JavaScript技巧分享(译)
2019/05/07 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
用Python解决计数原理问题的方法
2016/08/04 Python
Python中属性和描述符的正确使用
2016/08/23 Python
Python自定义主从分布式架构实例分析
2016/09/19 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
Python中常用信号signal类型实例
2018/01/25 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
2019/08/13 Python
python爬虫中多线程的使用详解
2019/09/23 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
2020/03/06 Python
解决redis与Python交互取出来的是bytes类型的问题
2020/07/16 Python
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
给国外客户的邀请函
2014/01/30 职场文书
乌鸦喝水教学反思
2014/02/07 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
小学教师师德师风自我剖析材料
2014/09/29 职场文书
人事行政助理岗位职责
2015/04/11 职场文书
团队拓展训练感想
2015/08/07 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书
微信告警的zabbix监控系统 监控整个NGINX集群
2022/04/18 Servers