You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.7+字典按键/值排序的最优最快方法

最优最快的Python 3.7+字典排序方法(按键/按值)

自从Python 3.7(其实CPython 3.6里就已经悄悄实现了)开始,标准字典的插入顺序终于得到官方保障,这让我们排序字典变得直接多了,不用再依赖OrderedDict来折腾。

你提到的直观写法确实很容易理解:

by_key = {k: dct[k] for k in sorted(dct.keys())}
by_value = {k: dct[k] for k in sorted(dct.keys(), key=dct.__getitem__)}

不过要说更快更优的实现,其实还有更高效的路子——直接操作字典的键值对元组。

更快的按键排序

直接对dct.items()排序,然后用dict()转成有序字典就行:

by_key = dict(sorted(dct.items()))

sorted()默认会按元组的第一个元素(也就是键)排序,这样省去了先取键再去字典里查值的步骤,少了一次索引操作,性能自然更好,代码也更简洁。

更快的按值排序

同样用items(),直接指定排序键为元组的第二个元素(值):

by_value = dict(sorted(dct.items(), key=lambda x: x[1]))

这里用lambda比dct.__getitem__更直观,还避免了属性访问的额外开销。要是想按值逆序排,加个reverse=True就行:

by_value_reversed = dict(sorted(dct.items(), key=lambda x: x[1], reverse=True))

额外的性能和稳定性提示

  • 小字典的话,几种方法差不了多少,但字典规模大到十万级以上时,基于items()的方法优势就明显了——毕竟少了一次键值查找。
  • 如果遇到值重复的情况,想要排序结果更稳定,可以把键作为次要排序条件:
    by_value_stable = dict(sorted(dct.items(), key=lambda x: (x[1], x[0])))
    
    这样值相同的键会按键的顺序排列,结果更可控。

老版本Python的兼容方案

在Python 3.7之前,标准字典不保证顺序,这时候就得靠collections.OrderedDict:

from collections import OrderedDict

by_key_ordered = OrderedDict(sorted(dct.items()))
by_value_ordered = OrderedDict(sorted(dct.items(), key=lambda x: x[1]))

不过现在Python 3.7+已经普及了,除非要兼容老项目,否则没必要再用OrderedDict做普通排序了。

内容的提问来源于stack exchange,提问作者Rick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:50:05