Python Cookbook-5.1 对字典排序

任务

你想对字典排序。这可能意味着需要先根据字典的键排序,然后再让对应值也处于同样的顺序。

解决方案

最简单的方法可以通过这样的描述来概括:先将键排序,然后由此选出对应值:

python 复制代码
def sortedDictValues(adict):
	keys = adict.keys()
	keys.sort()
	return [adict[key] for key in keys]

讨论

排序的概念仅仅适用于那些有顺序的集------换句话说,一个序列。而一个映射,比如字典,是没有顺序的,因此它无法被排序。然而,"我怎么才能将一个字典排序"是Python 邮件列表中一个很常见的问题,理论上这个问题没有什么意义。在绝大多数情况下,其实际目的是将字典中的键构成的序列排序。

至于实现部分,一些人总是考虑更复杂的方式,但其实解决方案中给出的最简单的方法也是最快的方法(对 Python 来说,这样的情况并不少见)。在Python 2.3中,在函数的最后的 return 语句中,将列表推导转换成对 map 的调用还可以获得一些速度的提升,大约 20%。比如:

python 复制代码
return map(adict.get,keys)

解决方案中的代码在 Python 2.4 下已经比 Python2.3要快了,按照上面的方式进行改写也不会获得很大的速度提升。而使用其他方法,比如用adict.__getitem__来代替adict.get,并不会提供任何性能的提升,反而会引起性能的些微下降,无论是在Python2.3 还是 2.4 中。

相关推荐
小关会打代码几秒前
关于Pycharm中在运行出现语法错误:Non-UTF-8 code starting with
ide·python·pycharm
用户3721574261351 分钟前
Python 高效将 PDF 转换为 HTML 的实用指南
python
深栈2 分钟前
机器学习:编码方式
人工智能·python·机器学习·编码
yzx9910136 分钟前
Django 搭配数据库开发智慧园区系统全攻略
python·django·数据库开发
PixelMind15 分钟前
【LLIE技术专题】 SCI代码讲解
图像处理·python·低照度图像增强·llie
花心蝴蝶.18 分钟前
Java 中的代理模式
java·开发语言·代理模式
日落辞朝阳24 分钟前
数据结构——顺序表
数据结构
风语者66626 分钟前
perl踩坑系列=====正则表达式捕获
开发语言·perl
我科绝伦(Huanhuan Zhou)29 分钟前
银河麒麟V10编译perl-5.42.0,并设置环境变量
开发语言·perl
Z_z在努力34 分钟前
【数据结构】哈希表(Hash Table)详解
数据结构·哈希算法·散列表