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 相关文章推荐
django定期执行任务(实例讲解)
Nov 03 Python
python执行CMD指令,并获取返回的方法
Dec 19 Python
深度辨析Python的eval()与exec()的方法
Mar 26 Python
python3.7 的新特性详解
Jul 25 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
Python yield生成器和return对比代码实例
Apr 20 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
Keras自定义IOU方式
Jun 10 Python
使用OpenCV实现道路车辆计数的使用方法
Jul 15 Python
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
Apr 06 Python
PyTorch梯度裁剪避免训练loss nan的操作
May 24 Python
使用pycharm运行flask应用程序的详细教程
Jun 07 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
超神学院:鹤熙已踏入神圣领域,实力不比凯莎弱
2020/03/02 国漫
php的header和asp中的redirect比较
2006/10/09 PHP
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
php安全配置记录和常见错误梳理(总结)
2017/03/28 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
2010/12/02 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
js将日期格式转换为YYYY-MM-DD HH:MM:SS
2020/09/18 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
python解析文件示例
2014/01/23 Python
按日期打印Python的Tornado框架中的日志的方法
2015/05/02 Python
详解Python爬虫的基本写法
2016/01/08 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
深入浅析Python 中 is 语法带来的误解
2019/05/07 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
python使用requests.session模拟登录
2019/08/09 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
中学生打架检讨书
2014/02/10 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
岗位说明书标准范本
2014/07/30 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
七年级作文之冬景
2019/11/07 职场文书
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
2022/04/06 Vue.js
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python