跳至主要内容

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

学习在 Python 中按值对字典进行排序的高效方法。了解升序与降序排序,以及按键排序的额外技巧。
· 5分钟 阅读

使用 AI 探索

排序是数据处理中的基本操作,Python 中的字典也不例外。无论我们是在进行复杂的数据分析项目还是编写简单脚本,掌握如何高效地按值对字典排序都大有裨益。

在本文中,我们将拆解多种在 Python 中按值对字典排序的方法,确保我们能够按需组织数据。

简短回答:如何在 Python 中按值对字典排序

要快速按值对字典排序,可以将 Python 内置的 .sorted() 函数与 lambda 函数结合使用。此方法对大多数用例都直观且高效。

student_scores = {
    'Alex': 88,
    'Ben': 75,
    'Cyrus': 93,
    'Denver': 85
}
sorted_by_values = dict(sorted(student_scores.items(), key=lambda item: item[1]))

print(sorted_by_values)

# Expected output:
# {'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}

现在,让我们退一步,了解一下 Python 字典,以及为什么我们可能需要对它们进行排序。

什么是 Python 字典?

Python 的字典是一种以键值对形式存储数据的数据结构。它非常灵活,并支持快速查找、插入和删除。下面是一个简单示例:

student_scores = {
    'Alex': 88,
    'Ben': 75,
    'Cyrus': 93,
    'Denver': 85
}

# No expected output

在上面的字典中,学生姓名是键,分数是值。

字典在许多场景中都很有用,例如当我们需要高效存取数据时。然而,有时按值而非按键对这些数据排序会更合适——比如我们想按成绩对学生进行排名。

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

现在,让我们更深入地了解 Python 中的 .sorted() 函数,以及如何专门用于按值对字典排序。

如何使用 .sorted() 按值对字典排序

.sorted() 函数是 Python 中功能强大且灵活的排序工具。要按字典的值进行排序,我们可以使用一个 lambda 函数,指定根据字典的值进行排序。

student_scores = {
    'Alex': 88,
    'Ben': 75,
    'Cyrus': 93,
    'Denver': 85
}
sorted_by_values = dict(sorted(student_scores.items(), key=lambda item: item[1]))

print(sorted_by_values)

# Expected output: 
# {'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}

在这个示例中,student_scores.items() 返回一个视图对象,显示一个列表,其中包含字典的键值二元组。.sorted() 函数按值(item[1])对这些二元组进行排序,然后用 dict() 将排序后的列表转换回字典。

如何按降序或升序按值排序字典

默认情况下,.sorted() 函数会按升序排序。不过,根据具体需求,我们可以通过设置 reverse 参数为 True 或 False,轻松切换为降序或升序。

如何按升序排序字典

如前所述,使用 .sorted() 函数时,字典默认将按升序排序。我们也可以通过将 reverse 参数设置为 False 来实现升序。

sorted_by_values_asc = dict(sorted(student_scores.items(), key=lambda item: item[1], reverse=False))
print(sorted_by_values_asc)

# Expected output:
# {'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}

如何按降序排序字典

如果我们想按降序排序,可以将 reverse 参数设置为 True。

sorted_by_values_desc = dict(sorted(student_scores.items(), key=lambda item: item[1], reverse=True))
print(sorted_by_values_desc)

# Expected output:
# {'Cyrus': 93, 'Alex': 88, 'Denver': 85, 'Ben': 75}

加分项:如何在 Python 中按键对字典排序

虽然本文重点介绍按值排序,但了解如何按键对字典排序也很有帮助。这同样可以使用 .sorted() 函数来完成。

sorted_by_keys = dict(sorted(student_scores.items()))
print(sorted_by_keys)

# Expected output:
# {'Alex': 88, 'Ben': 75, 'Cyrus': 93, 'Denver': 85}

若要按降序排序,只需设置 reverse=True:

sorted_by_keys_desc = dict(sorted(student_scores.items(), reverse=True))
print(sorted_by_keys_desc)

# Expected output:
# {'Denver': 85', 'Cyrus': 93, 'Ben': 75, 'Alex': 88}

结语

在 Python 中按值对字典排序是常见任务,使用 .sorted() 函数即可轻松完成。无论我们需要升序还是降序,理解这些技巧都能让数据处理更直接、更高效。掌握这些排序方法后,我们就能确保数据始终按需有序。

常见问题

Q1: 如果字典的值是字符串而不是数字,能按值排序吗?

A1:可以。即使值是字符串,我们也能按值对字典排序。.sorted() 会像处理数字一样,按字母顺序以升序或降序对值进行排序。

Q2: 如果字典包含嵌套字典,如何按值排序?

A2:要对包含嵌套字典的字典按值排序,我们需要定义自定义排序函数,以提取并比较相关的嵌套值。这需要更复杂的 lambda 函数,或单独编写一个函数来处理比较。

Q3: 能否在不创建新字典的情况下就地按值排序?

A3:不可以。对于 3.7 之前的版本,Python 中的字典本质上是无序的;从 Python 3.7 起虽然保持插入顺序,但并没有内建的就地排序方法。对字典进行排序总是会生成一个具有期望顺序的新字典。

Q4: 在 Python 中按值排序字典的时间复杂度是多少?

A4:使用 .sorted() 按值排序的时间复杂度为 O(n log n),其中 n 是字典的键值对数量。原因在于 .sorted() 内部使用了 Timsort,这是一种具有该复杂度的混合排序算法。

Q5: 按值排序后会改变原始字典吗?

A5:不会。使用 .sorted() 按值排序会创建一个新的字典。原始字典不会被修改。

Neetika Khandelwal

作者

Neetika Khandelwal

我是一名 Java 开发者兼资深技术写作者,专注于数据科学、人工智能(AI)和 Java 编程。在超过 3 年的软件开发经验中,我积累了扎实的能力,能够构建稳健、可扩展的应用,并充分发挥 Java 的多样性来解决复杂问题。我热衷于与更广泛的技术社区分享知识。通过系统的技术文章、教程和指南,我致力于将复杂的数据科学与 AI 概念化繁为简,帮助初学者和有经验的专业人士高效理解。目前,我已发表超过 125 篇博客。

主题