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

相关推荐
unicrom_深圳市由你创科技3 分钟前
做虚拟示波器这种实时波形显示的上位机,用什么语言?
c++·python·c#
小敬爱吃饭4 分钟前
Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
人工智能·python·nginx·docker·语言模型·容器·数据挖掘
无限进步_9 分钟前
【C++】电话号码的字母组合:从有限处理到通用解法
开发语言·c++·ide·windows·git·github·visual studio
宸津-代码粉碎机10 分钟前
Spring Boot 4.0虚拟线程实战调优技巧,最大化发挥并发优势
java·人工智能·spring boot·后端·python
JJay.23 分钟前
Android Kotlin 协程使用指南
android·开发语言·kotlin
知行合一。。。28 分钟前
Python--04--数据容器(集合)
python
csbysj202029 分钟前
jQuery 捕获详解
开发语言
计算机安禾31 分钟前
【数据结构与算法】第35篇:归并排序与基数排序
c语言·数据结构·vscode·算法·排序算法·哈希算法·visual studio
专注API从业者35 分钟前
淘宝商品详情 API 与爬虫技术的边界:合法接入与反爬策略的技术博弈
大数据·数据结构·数据库·爬虫
C++ 老炮儿的技术栈38 分钟前
GCC编译时无法向/tmp 目录写入临时汇编文件,因为设备空间不足,解决
linux·运维·开发语言·汇编·c++·git·qt