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 相关文章推荐
Windows上配置Emacs来开发Python及用Python扩展Emacs
Nov 20 Python
python实现文本去重且不打乱原本顺序
Jan 26 Python
python 系统调用的实例详解
Jul 11 Python
利用aardio给python编写图形界面
Aug 21 Python
python遍历序列enumerate函数浅析
Oct 17 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
python实现批量按比例缩放图片效果
Mar 30 Python
numpy中loadtxt 的用法详解
Aug 03 Python
python递归法解决棋盘分割问题
Jul 17 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
Mar 08 Python
基于python实现破解滑动验证码过程解析
May 28 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 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获取数组长度的方法(有实例)
2013/10/27 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
Composer设置忽略版本匹配的方法
2016/04/27 PHP
javascript 尚未实现错误解决办法
2008/11/27 Javascript
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
JavaScript 加号(+)运算符号
2009/12/06 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
六款帮助你实现惊艳视差滚动效果的jQuery插件
2012/09/14 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
2014/01/16 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
JavaScript使用setTimeout实现延迟弹出警告框的方法
2015/04/07 Javascript
第一次接触神奇的Bootstrap导航条
2016/08/09 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
iscroll实现下拉刷新功能
2017/07/18 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
JS判断数组里是否有重复元素的方法小结
2019/05/21 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
Python生成随机数组的方法小结
2017/04/15 Python
python正则表达式之对号入座篇
2018/07/24 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
大学生个人先进事迹材料范文
2014/05/03 职场文书
代办委托书怎么写
2014/08/01 职场文书
热情服务标语
2014/10/07 职场文书
小升初自荐信范文
2015/03/05 职场文书
运动与健康自我评价
2015/03/09 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android