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 中。

相关推荐
tanyongxi6614 分钟前
C++ 特殊类设计与单例模式解析
java·开发语言·数据结构·c++·算法·单例模式
遗憾皆是温柔17 分钟前
24. 什么是不可变对象,好处是什么
java·开发语言·面试·学习方法
wearegogog12337 分钟前
C语言中的输入输出函数:构建程序交互的基石
c语言·开发语言·交互
Fine姐40 分钟前
The Network Link Layer: 无线传感器中Delay Tolerant Networks – DTNs 延迟容忍网络
开发语言·网络·php·硬件架构
HAPPY酷1 小时前
给纯小白的Python操作 PDF 笔记
开发语言·python·pdf
liulilittle1 小时前
BFS寻路算法解析与实现
开发语言·c++·算法·宽度优先·寻路算法·寻路
阿珊和她的猫1 小时前
autofit.js: 自动调整HTML元素大小的JavaScript库
开发语言·javascript·html
闪电麦坤951 小时前
数据结构:在二叉搜索树中插入元素(Insert in a BST)
数据结构·二叉树··二叉搜索树
闪电麦坤952 小时前
数据结构:用链式队列实现层序遍历 (Level-order Traversal)
数据结构··遍历
喜欢吃燃面2 小时前
C++算法竞赛:位运算
开发语言·c++·学习·算法