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 相关文章推荐
sqlalchemy对象转dict的示例
Apr 22 Python
跟老齐学Python之赋值,简单也不简单
Sep 24 Python
python django事务transaction源码分析详解
Mar 17 Python
Python正则表达式常用函数总结
Jun 24 Python
python取余运算符知识点详解
Jun 27 Python
python画图的函数用法以及技巧
Jun 28 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
Tensorflow限制CPU个数实例
Feb 06 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
Mar 06 Python
如何快速理解python的垃圾回收机制
Sep 01 Python
Pycharm学生免费专业版安装教程的方法步骤
Sep 24 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
web方式ftp
2006/10/09 PHP
php下把数组保存为文件格式的实例应用
2010/02/08 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
2018/05/10 PHP
php中钩子(hook)的原理与简单应用demo示例
2019/09/03 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
在AngularJS框架中处理数据建模的方式解析
2016/03/05 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
Angular ng-repeat指令实例以及扩展部分
2016/12/26 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
jQuery实现回到顶部效果
2020/10/19 jQuery
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
python实现顺时针打印矩阵
2019/03/02 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
Python守护进程实现过程详解
2020/02/10 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
css3气泡 css3关键帧动画创建的动态通知气泡
2013/02/26 HTML / CSS
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
机关党员进社区活动总结
2014/07/05 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
艺术节开幕词
2015/01/28 职场文书
【海涛教你打dota】体验一超神发条:咱是抢盾专业户
2022/04/01 DOTA