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的Django框架中的Memcached
Jul 23 Python
python实现简单遗传算法
Mar 19 Python
python 获取微信好友列表的方法(微信web)
Feb 21 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
django url到views参数传递的实例
Jul 19 Python
python验证码图片处理(二值化)
Nov 01 Python
Python 实现Numpy中找出array中最大值所对应的行和列
Nov 26 Python
用python爬取历史天气数据的方法示例
Dec 30 Python
pandas中ix的使用详细讲解
Mar 09 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
在keras中实现查看其训练loss值
Jun 16 Python
python2和python3哪个使用率高
Jun 23 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将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
php创建类并调用的实例方法
2019/09/25 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
2019/10/12 PHP
Jquery cookie操作代码
2010/03/14 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
调试代码导致IE出错的避免方法
2014/04/04 Javascript
Vue.js中的extend绑定节点并显示的方法
2019/06/20 Javascript
jquery.pager.js实现分页效果
2019/07/29 jQuery
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
更改Python命令行交互提示符的方法
2015/01/14 Python
分享一个常用的Python模拟登陆类
2015/03/29 Python
python中引用与复制用法实例分析
2015/06/04 Python
Python图片裁剪实例代码(如头像裁剪)
2017/06/21 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
利用Python如何实时检测自身内存占用
2020/05/09 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
CSS3中border-radius属性设定圆角的使用技巧
2016/05/10 HTML / CSS
FC-Moto英国:欧洲最大的摩托车服装和头盔商店之一
2019/08/25 全球购物
非常详细的C#面试题集
2016/07/13 面试题
关于毕业的广播稿
2014/01/10 职场文书
报关专员求职信范文
2014/02/22 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
王兆力在市委党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
村官个人总结范文
2015/03/03 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
家长必看:义务教育,不得以面试 评测等名义选拔学生
2019/07/09 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server