如何在 Python 中按值对字典进行排序

了解如何按 Python 字典的值对字典进行排序。探索使用排序()、自定义键 lambda 进行排序,以及构建有序字典结构。

在编辑器中尝试此解决方案

概述

虽然字典主要是为使用唯一键进行快速查找操作而构建的,但您通常需要根据字典项的值对它们进行排序。例如,按考试成绩对学生进行排序,从最便宜到最贵列出产品,或按频率对字数进行排序。

在 Python 中,您无法直接对字典进行就地排序,因为标准字典结构不支持列表等排序方法。相反,标准方法是使用“.items()”方法将字典的项目作为元组检索,使用内置的“sorted()”函数和自定义排序键对这些元组进行排序,然后从排序的项目重建字典。

排序键通常是一个 lambda 函数,它返回元组的第二个元素(字典值):“key=lambda item: item[1]”。自Python 3.7+ 起,标准字典保留插入顺序。使用 dict() 构造函数将已排序的元组列表重新转换回字典,返回一个干净的、已排序的字典,可供迭代。

代码和执行输出

此脚本演示使用 lambda 函数按值按升序和降序对测试分数字典进行排序。

sort_dict_values.py
在编辑器中尝试
scores = {"Alice": 88, "Bob": 75, "Charlie": 95, "David": 82}
print("Original dictionary:", scores)

# 1. Sort by values (ascending order)
sorted_ascending = dict(sorted(scores.items(), key=lambda item: item[1]))
print("Sorted ascending:", sorted_ascending)

# 2. Sort by values (descending order)
sorted_descending = dict(sorted(scores.items(), key=lambda item: item[1], reverse=True))
print("Sorted descending:", sorted_descending)

# 3. sorting by keys for comparison
sorted_keys = dict(sorted(scores.items(), key=lambda item: item[0]))
print("Sorted by keys:", sorted_keys)
端子输出
Original dictionary: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}
Sorted ascending: {'Bob': 75, 'David': 82, 'Alice': 88, 'Charlie': 95}
Sorted descending: {'Charlie': 95, 'Alice': 88, 'David': 82, 'Bob': 75}
Sorted by keys: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}

逐步实施

  • 调用 my_dict.items() 以元组列表形式检索键值对。
  • 将字典项传递给sorted()函数。
  • 指定 key=lambda item: item[1] 指示sorted() 函数根据值(每个元组的第二个元素)进行排序。
  • 传递reverse=True 作为可选参数以按降序对项目进行排序。
  • 通过将排序的元组列表传递给 dict() 构造函数来重建排序的字典。

常见问题解答

key=lambda item: item[1] 是什么意思?

Sorted() 函数将项目序列的每个元素((key, value) 的元组)传递给 lambda 函数。 item[1] 提取值分量,告诉 Python 按值对元组进行排序。

字典排序会影响其键查找速度吗?

不会,键查找的平均时间复杂度仍然是 O(1),因为排序仅更改迭代顺序,而不更改底层哈希表结构。

相关主题

推荐的 Python 资源

通过相关的交互式教程、备忘单和代码比较来扩展您的知识。