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中time()方法的使用的教程
May 22 Python
Python序列操作之进阶篇
Dec 08 Python
浅谈Django REST Framework限速
Dec 12 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
浅谈python中拼接路径os.path.join斜杠的问题
Oct 23 Python
python读取txt文件,去掉空格计算每行长度的方法
Dec 20 Python
python+selenium实现QQ邮箱自动发送功能
Jan 23 Python
python实现socket+threading处理多连接的方法
Jul 23 Python
Python简单实现区域生长方式
Jan 16 Python
基于python实现获取网页图片过程解析
May 11 Python
python求解汉诺塔游戏
Jul 09 Python
Python 打印自己设计的字体的实例讲解
Jan 04 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
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
php读取mysql的简单实例
2014/01/15 PHP
php解压文件代码实现php在线解压
2014/02/13 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
2013/11/14 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
React实现阿里云OSS上传文件的示例
2020/08/10 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
基于Python实现一个简单的银行转账操作
2016/03/06 Python
详解Python中heapq模块的用法
2016/06/28 Python
Python根据服务获取端口号的方法
2019/09/25 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
大学生开西餐厅创业计划书
2014/02/01 职场文书
2014年元旦促销活动方案
2014/02/22 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
教师求职自荐信
2015/03/26 职场文书
检讨书怎么写?
2019/06/21 职场文书
Python图片检索之以图搜图
2021/05/31 Python