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 相关文章推荐
py2exe 编译ico图标的代码
Mar 08 Python
Python编程给numpy矩阵添加一列方法示例
Dec 04 Python
python爬虫中get和post方法介绍以及cookie作用
Feb 08 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 Python
python实时监控cpu小工具
Jun 21 Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 Python
Python socket模块方法实现详解
Nov 05 Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 Python
Python cookie的保存与读取、SSL讲解
Feb 17 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
Feb 28 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
Jan 15 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
虫族 Zerg 历史背景
2020/03/14 星际争霸
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
使用php实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
php 数组元素快速去重
2017/05/05 PHP
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
2020/01/07 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
[49:35]LGD vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
python中函数返回多个结果的实例方法
2020/12/16 Python
大学生优秀团员事迹材料
2014/01/30 职场文书
地理教师岗位职责
2014/03/16 职场文书
服务质量承诺书
2014/03/27 职场文书
倡议书格式范文
2014/04/14 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
经典演讲稿汇总
2014/05/19 职场文书
学习雷锋月活动总结
2014/07/03 职场文书
材料采购员岗位职责
2015/04/03 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书