Python字典按值排序:sorted与sort方法详解

雨后青山
雨后青山
发布时间:2026-10-14| 4人浏览过
原创

本文详细介绍Python中字典按值排序的两种常用方法:使用sorted高阶函数和列表的sort()方法。通过示例解析lambda表达式在排序中的应用,强调d.items()的使用及结果赋值的必要性,并附带jieba库词频统计的实际应用场景,帮助开发者高效处理字典排序问题。

使用sorted高阶函数进行字典排序

一、使用sorted高阶函数

该方法代码简洁,是官方推荐的首选方案。


d={'a':1,'c':3,'b':2}  # 首先建一个字典d

#d.items()返回的是: dict_items([('a', 1), ('c', 3), ('b', 2)])

d_order=sorted(d.items(),key=lambda x:x[1],reverse=False) # 按字典集合中,每一个元组的第二个元素排列。
                              # x相当于字典集合中遍历出来的一个元组。
print(d_order)   # 得到: [('a', 1), ('b', 2), ('c', 3)]

以下是对sorted排序机制的详细解析:

1. sorted函数的基本语法为:sorted(可迭代对象, key=函数名, reverse=False/True)。

其核心功能是遍历可迭代对象,依据key指定的规则对元素进行排序。

可迭代对象指包含多个元素的数据结构,如集合、序列(列表、字符串、元组)以及字典等。

key参数用于定义排序依据,通常需自定义一个返回排序关键值的函数,并将该函数名赋值给key。

reverse参数控制排序方向,默认为False(升序);设为True时则执行降序排列。

2. 匿名函数lambda的标准格式为:    函数名 = lambda  [形参1,形参2,...] : ,用于定义简易函数并返回操作结果。

具体示例如下:key=lambda x : x[1]      

其中x代表字典项中的一个元组,例如从dict_items([('a', 1), ('c', 3), ('b', 2)])中取出的('a', 1)、('c', 3)或('b', 2)。

x[1]表示提取元组的第二个元素,即键值对中的值(如1、2或3),以此作为排序依据。

关键注意事项:

(1)对字典排序时,直接迭代字典d仅能得到键,必须使用d.items()才能获取键值对。

错误写法示例:d_order=sorted(d,key=lambda x:x[1],reverse=False),这会导致错误。

正确写法应为:d_order=sorted(d.items(),key=lambda x:x[1],reverse=False)。

(2)sorted函数返回的是排序后的列表,必须将其赋值给一个新变量,例如d_order=sorted(d.items(),key=lambda x:x[1],reverse=False)。

由于字典本身是无序数据结构,若不将排序结果绑定到新变量,原始字典的顺序不会改变且看似被“打乱”。

利用列表sort()方法间接排序

二、使用列表的sort()方法

Python字典内置无排序方法,但可借助列表的sort()方法间接实现。

操作前提是将字典转换为列表后再进行排序。

具体示例如下:


d={'a':1,'c':3,'b':2}  # 首先建一个字典d

d.items()    # 得到: dict_items([('a', 1), ('c', 3), ('b', 2)])

L=list(d.items())    # 得到列表: L=[('a', 1), ('c', 3), ('b', 2)]

L.sort(key=lambda x:x[1],reverse=False) # 按列表中,每一个元组的第二个元素从小到大排序。
                     # x代表从L中遍历出的一个元组

print(L)   # 得到: [('a', 1), ('b', 2), ('c', 3)]

注意事项:

1. 关键步骤在于:L=list(d.items()),即执行 L = list(dict_items([('a', 1), ('c', 3), ('b', 2)])。

利用list()构造函数将L= dict_items([('a', 1), ('c', 3), ('b', 2)]) 转换为列表,最终得到列表结构:  L=[('a', 1), ('c', 3), ('b', 2)] 。

补充说明:经过多次尝试发现,list()构造函数能直接将d.items()生成的dict_items对象转换为列表,这一特性非常实用。

2. 简述列表的L.sort()方法:L.sort(key=函数名, reverse=False/True)。

L.sort()会遍历列表元素,依据key绑定的函数进行排序。

示例:L.sort(key=lambda x:x[1],reverse=False),此时L=[('a', 1), ('c', 3), ('b', 2)]。

该过程从列表L中取出第一个元素('a', 1),以其第二个元素'1'为基准进行排序。

随后依次取出后续元素,确定各自的排序依据。

最终因reverse=False,按从小到大的顺序输出结果。

注:L.sort()还支持其他参数,有兴趣者可查阅官方文档或相关教程。

字典排序的实际应用场景

三、实际应用扩展

作者在使用jieba库进行文本词频统计时,遇到了字典排序的需求。

感兴趣的用户可参考下方代码,或自行选取文本测试,体验十分有趣。


import jieba
with open("天龙八部-网络版.txt",'r',encoding='utf-8') as f:
  txt=f.read()
  words=jieba.lcut(txt)
  d={}
  for word in words:
    d[word]=d.get(word,0)+1
  del d[' ']
  del d['\n']
with open("天龙八部-词语统计.txt",'w',encoding='utf-8') as f2:
  d=sorted(d.items(),key=lambda x:x[1],reverse=True)
  for x,y in d:
    f2.write("{}:{}\n".format(x,y))

注:代码还可进一步优化,例如增加文本降噪处理。

四、总结

经过一天的调试与探索,最终解决了字典排序的问题。

以上就是关于Python字典按值排序的实现方法,更多相关内容可搜索本站往期文章或继续阅读后续教程,感谢支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。