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 相关文章推荐
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
Python抓取手机号归属地信息示例代码
Nov 28 Python
python使用mysql数据库示例代码
May 21 Python
tf.truncated_normal与tf.random_normal的详细用法
Mar 05 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
May 24 Python
Python3.5运算符操作实例详解
Apr 25 Python
对python 中re.sub,replace(),strip()的区别详解
Jul 22 Python
基于python实现学生信息管理系统
Nov 22 Python
python带参数打包exe及调用方式
Dec 21 Python
python给图像加上mask,并提取mask区域实例
Jan 19 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
Jun 04 Python
Python OpenCV中的numpy与图像类型转换操作
Dec 11 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:风雨欲来 路在何方?
2006/10/09 PHP
php FPDF类库应用实现代码
2009/03/20 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
js获取网页高度(详细整理)
2012/12/28 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
JQuery标签页效果实例详解
2015/12/24 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
JS中innerHTML和pasteHTML的区别实例分析
2016/06/22 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
微信小程序表单验证错误提示效果
2017/05/19 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
Python监控主机是否存活并以邮件报警
2015/09/22 Python
python主线程捕获子线程的方法
2018/06/17 Python
使用selenium模拟登录解决滑块验证问题的实现
2019/05/10 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
keras导入weights方式
2020/06/12 Python
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
农田水利实习自我鉴定
2013/09/19 职场文书
教师实习自我鉴定
2013/12/11 职场文书
《第一朵杏花》教学反思
2014/04/16 职场文书
党员承诺书格式
2014/05/21 职场文书
安全生产宣传标语
2014/06/06 职场文书
学生病假条怎么写
2015/08/17 职场文书
Netty分布式客户端接入流程初始化源码分析
2022/03/25 Java/Android
请求模块urllib之PYTHON爬虫的基本使用
2022/04/08 Python