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命令行参数解析OptionParser类用法实例
Oct 09 Python
Python实现批量修改文件名实例
Jul 08 Python
深入解析Python中的descriptor描述器的作用及用法
Jun 27 Python
浅析Python数据处理
May 02 Python
Python自动发送邮件的方法实例总结
Dec 08 Python
Python写一个基于MD5的文件监听程序
Mar 11 Python
基于Python的图像数据增强Data Augmentation解析
Aug 13 Python
Python (Win)readline和tab补全的安装方法
Aug 27 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
pytorch实现seq2seq时对loss进行mask的方式
Feb 18 Python
浅析Python __name__ 是什么
Jul 07 Python
Python 全局空间和局部空间
Apr 06 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/08/06 PHP
php使用百度天气接口示例
2014/04/22 PHP
thinkPHP查询方式小结
2016/01/09 PHP
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
2016/09/09 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
2017/01/12 Javascript
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
Vue实现双向数据绑定
2017/05/03 Javascript
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
2018/01/10 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
2018/05/08 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
MAC中PyCharm设置python3解释器
2017/12/15 Python
Python实现购物车购物小程序
2018/04/18 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
完美解决jupyter由于无法import新包的问题
2020/05/26 Python
python 用struct模块解决黏包问题
2020/11/07 Python
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别
2012/11/04 面试题
会计应聘求职信范文
2013/12/17 职场文书
2014年应届大学生自我评价
2014/01/09 职场文书
节能环保演讲稿
2014/08/28 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
烟台的海导游词
2015/02/02 职场文书
综合素质自我评价评语
2015/03/06 职场文书
兴趣班停课通知
2015/04/24 职场文书
女性健康讲座主持词
2015/07/04 职场文书
利用js实现简单开关灯代码
2021/11/23 Javascript