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 获取et和excel的版本号
Apr 09 Python
使用Python生成url短链接的方法
May 04 Python
Win10下Python环境搭建与配置教程
Nov 18 Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 Python
python使用threading获取线程函数返回值的实现方法
Nov 15 Python
python去重,一个由dict组成的list的去重示例
Jan 21 Python
Python之列表实现栈的工作功能
Jan 28 Python
python实现词法分析器
Jan 31 Python
Python3标准库总结
Feb 19 Python
Python 使用matplotlib模块模拟掷骰子
Aug 08 Python
Python3.7下安装pyqt5的方法步骤(图文)
May 12 Python
超级实用的8个Python列表技巧
Aug 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
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
php session 写入数据库
2016/02/13 PHP
CI框架入门之MVC简单示例
2016/11/21 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
jQuery选择器总结之常用元素查找方法
2016/08/04 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
[01:33:25]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第一场 1月24日
2021/03/11 DOTA
python 中的divmod数字处理函数浅析
2017/10/17 Python
python中hashlib模块用法示例
2017/10/30 Python
Python2包含中文报错的解决方法
2018/07/09 Python
详解Python做一个名片管理系统
2019/03/14 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
大学生学年自我鉴定
2014/02/10 职场文书
数学国培研修感言
2014/02/13 职场文书
个人优缺点总结
2015/02/28 职场文书
运动会广播稿300字
2015/08/19 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
python爬取豆瓣电影TOP250数据
2021/05/23 Python
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL