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聚类算法之基本K均值实例详解
Nov 20 Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 Python
Python标准库sched模块使用指南
Jul 06 Python
Tornado高并发处理方法实例代码
Jan 15 Python
Django缓存系统实现过程解析
Aug 02 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 Python
keras 解决加载lstm+crf模型出错的问题
Jun 10 Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 Python
python中编写函数并调用的知识点总结
Jan 13 Python
解决pytorch 的state_dict()拷贝问题
Mar 03 Python
解决Django transaction进行事务管理踩过的坑
Apr 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
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
PHP数组函数知识汇总
2016/05/12 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
Javascript中的常见排序算法
2007/03/27 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
Javascript实现的SHA-256加密算法完整实例
2016/02/02 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
Vue 理解之白话 getter/setter详解
2019/04/16 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
js实现车辆管理系统
2020/08/26 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
python三方库之requests的快速上手
2019/03/04 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
numpy 声明空数组详解
2019/12/05 Python
pytorch自定义二值化网络层方式
2020/01/07 Python
为什么python比较流行
2020/06/19 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫