如何按值对字典排序

Jinku Hu 2023年1月30日
  1. 只获取已排序的值列表
  2. 使用 operator.itemgetter 对字典排序
  3. 使用 lambda 函数作为 sorted 函数中的比较键来对字典排序
  4. OrderedDict 数据类型来得到跟字典数据类型兼容的结果
如何按值对字典排序

Python 字典是一种无序数据类型,因此,你无法通过其键或值对字典进行排序。但是你可以得到用其他数据类型表示的 Python 字典排序的结果,例如可以用列表来表示字典排序的结果。

假设我们有一个如下的字典,

exampleDict = {"first": 3, "second": 4, "third": 2, "fourth": 1}

只获取已排序的值列表

sortedDict = sorted(exampleDict.values())
# Out: [1, 2, 3, 4]

使用 operator.itemgetter 对字典排序

import operator

sortedDict = sorted(exampleDict.items(), key=operator.itemgetter(1))
# Out: [('fourth', 1), ('third', 2), ('first', 3), ('second', 4)]

exampleDict.items 返回字典元素的键值对。key=operator.itemgetter(1) 指定比较键是字典的值,类似的,operator.itemgetter(0) 会指定比较键为字典的键。

使用 lambda 函数作为 sorted 函数中的比较键来对字典排序

你也可以使用 lambda 方程来作为比较键而不是用 operator.itemgetter 做键值。

sortedDict = sorted(exampleDict.items(), key=lambda x: x[1])
# Out: [('fourth', 1), ('third', 2), ('first', 3), ('second', 4)]

exampleDict.items() 返回字典的键值对列表,其元素的数据类型为元组。x 是这个元组的元素,其中 x[0] 是键,x[1] 值是值。 key=lambda x:x[1] 表示比较键是字典元素的值。

OrderedDict 数据类型来得到跟字典数据类型兼容的结果

上面示例代码的结果是列表,而不是字典类型。如果要将结果保持为字典兼容类型,那从 Python 2.7 开始引入的 OrderedDict 是一个不错的选择。

from collections import OrderedDict

sortedDict = OrderedDict(sorted(exampleDict.items(), key=lambda x: x[1]))
# Out: OrderedDict([('fourth', 1), ('third', 2), ('first', 3), ('second', 4)])

OrderedDict 类型是 Python 字典 dict 的一个子类,它支持字典的常见方法,也能记住元素被插入的顺序。

作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook

相关文章 - Python Dictionary