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

相关推荐
whoarethenext12 分钟前
使用 C++ 实现 MFCC 特征提取与说话人识别系统
开发语言·c++·语音识别·mfcc
ITfeib22 分钟前
Flutter
开发语言·javascript·flutter
想躺平的咸鱼干1 小时前
Volatile解决指令重排和单例模式
java·开发语言·单例模式·线程·并发编程
Owen_Q1 小时前
Denso Create Programming Contest 2025(AtCoder Beginner Contest 413)
开发语言·算法·职场和发展
·云扬·2 小时前
【Java源码阅读系列37】深度解读Java BufferedReader 源码
java·开发语言
liulilittle2 小时前
C++ i386/AMD64平台汇编指令对齐长度获取实现
c语言·开发语言·汇编·c++
巴里巴气2 小时前
selenium基础知识 和 模拟登录selenium版本
爬虫·python·selenium·爬虫模拟登录
19892 小时前
【零基础学AI】第26讲:循环神经网络(RNN)与LSTM - 文本生成
人工智能·python·rnn·神经网络·机器学习·tensorflow·lstm
JavaEdge在掘金3 小时前
Redis 数据倾斜?别慌!从成因到解决方案,一文帮你搞定
python
ansurfen3 小时前
我的第一个AI项目:从零搭建RAG知识库的踩坑之旅
python·llm