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 yield使用方法示例
Dec 04 Python
python操作摄像头截图实现远程监控的例子
Mar 25 Python
浅谈插入排序算法在Python程序中的实现及简单改进
May 04 Python
python opencv之SURF算法示例
Feb 24 Python
用Python实现筛选文件脚本的方法
Oct 27 Python
Python检查ping终端的方法
Jan 26 Python
深入浅析python 协程与go协程的区别
May 09 Python
python的pstuil模块使用方法总结
Jul 26 Python
python爬虫之遍历单个域名
Nov 20 Python
python爬虫把url链接编码成gbk2312格式过程解析
Jun 08 Python
Python计算信息熵实例
Jun 18 Python
Python Django路径配置实现过程解析
Nov 05 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程序的方法小结
2012/02/23 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
功能强大的php分页函数
2016/07/20 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
2010/09/12 Javascript
jQuery实现跨域
2015/02/03 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
浅谈javascript中的call、apply、bind
2016/03/06 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
详解vue-router2.0动态路由获取参数
2017/06/14 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
Python代码解决RenderView窗口not found问题
2016/08/28 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
python 默认参数相关知识详解
2019/09/18 Python
Python实现word2Vec model过程解析
2019/12/16 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
美国第一香水网站:Perfume.com
2017/01/23 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
初级Java程序员面试题
2016/03/03 面试题
广告学专业应届生求职信
2013/10/01 职场文书
商务助理岗位职责
2013/11/13 职场文书
环境工程毕业生自荐信
2013/11/17 职场文书
机械系大学毕业生推荐信
2013/11/27 职场文书
毕业生的自我评价
2013/12/30 职场文书
西北政法大学自主招生自荐信
2014/01/29 职场文书
大学秋游活动方案
2014/02/11 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
医师定期考核实施方案
2014/05/07 职场文书
迁徙的鸟观后感
2015/06/09 职场文书
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers