介绍
Python 中的字典是将数据存储为键值对的项目集合。 在 Python 3.7 及更高版本中,字典按项目插入的顺序排序。 在早期版本中,它们是无序的。
在本文中,我们将了解如何根据字典包含的值对字典进行排序。
排序字典使用 循环
我们可以在 a 的帮助下对字典进行排序 for
环形。 首先,我们使用 sorted()
函数对字典的值进行排序。 然后我们遍历排序的值,找到每个值的键。 我们将这些键值对按排序顺序添加到新字典中。
请注意: 排序不允许您对字典重新排序。 我们正在一个全新的空字典中编写有序对。
dict1 = {1: 1, 2: 9, 3: 4}
sorted_values = sorted(dict1.values())
sorted_dict = {}
for i in sorted_values:
for k in dict1.keys():
if dict1[k] == i:
sorted_dict[k] = dict1[k]
print(sorted_dict)
如果你用 Python 解释器运行它,你会看到:
{1: 1, 3: 4, 2: 9}
现在我们已经了解了如何使用循环进行排序,让我们看看一个更流行的替代方案,它使用 sorted()
功能。
排序字典使用 sorted() 功能
我们之前使用了 sorted()
函数对数组的值进行排序。 当对字典进行排序时,我们可以再传递一个参数给 sorted()
像这样的功能: sorted(dict1, key=dict1.get)
.
在这里, key
是在比较值进行排序之前在每个元素上调用的函数。 这 get()
字典对象上的方法返回字典键的值。
sorted(dict1, key=dict1.get)
表达式将返回其值按顺序排序的键列表。 从那里,我们可以创建一个新的排序字典:
dict1 = {1: 1, 2: 9, 3: 4}
sorted_dict = {}
sorted_keys = sorted(dict1, key=dict1.get)
for w in sorted_keys:
sorted_dict[w] = dict1[w]
print(sorted_dict)
使用 sorted()
函数减少了我们在使用时必须编写的代码量 for
循环。 但是,我们可以进一步结合 sorted()
功能与 itemgetter()
按值排序字典的更简洁的解决方案。
排序字典使用 操作者 模块和 项目获取器()
operator
模块包括 itemgetter()
功能。 此函数返回一个可调用对象,该对象从一个对象返回一个项目。
例如,让我们使用 itemgetter()
创建一个可调用对象,该对象返回任何字典的值,其键为 2
:
import operator
dict1 = {1: 1, 2: 9}
get_item_with_key_2 = operator.itemgetter(2)
print(get_item_with_key_2(dict1))
每个字典都可以访问 items()
方法。 此函数将字典的键值对作为元组列表返回。 我们可以使用 itemgetter()
函数提取元组的第二个值,即字典中键的值。
排序后,我们可以根据这些值创建字典:
import operator
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)
sorted_dict = {k: v for k, v in sorted_tuples}
print(sorted_dict)
用更少的努力,我们就有了一个按值排序的字典!
作为 key
参数接受任何函数,我们可以使用 lambda 函数返回字典值,以便对它们进行排序。 让我们看看如何。
使用 Lambda 函数对字典进行排序
Lambda 函数是 Python 中的匿名或无名函数。 我们可以使用 lambda 函数来获取字典项的值,而无需导入 operator
模块 itemgetter()
. 如果您想了解有关 lambda 的更多信息,可以在我们的指南中阅读它们 Python 中的 Lambda 函数.
查看我们的 Git 学习实践指南,其中包含最佳实践、行业认可的标准以及随附的备忘单。 停止谷歌搜索 Git 命令,实际上 学习 它!
让我们使用 lambda 函数按值对字典进行排序 key
的论点 sorted()
:
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=lambda item: item[1])
print(sorted_tuples)
sorted_dict = {k: v for k, v in sorted_tuples}
print(sorted_dict)
请注意,到目前为止我们讨论的方法仅适用于 Python 3.7 及更高版本。 让我们看看我们可以为早期版本的 Python 做些什么。
返回具有排序值的新字典
按值对字典进行排序后,要在 3.7 之前的 Python 版本中保留已排序的字典,您必须使用 OrderedDict
– 可在 collections
模块。 这些对象是保持插入顺序的字典。
这是一个排序和使用的例子 OrderedDict
:
import operator
from collections import OrderedDict
dict1 = {1: 1, 2: 9, 3: 4}
sorted_tuples = sorted(dict1.items(), key=operator.itemgetter(1))
print(sorted_tuples)
sorted_dict = OrderedDict()
for k, v in sorted_tuples:
sorted_dict[k] = v
print(sorted_dict)
结论
本教程展示了如何根据字典的值对字典进行排序。 我们首先使用两个 for 循环对字典进行排序。 然后我们通过使用 sorted()
功能。 我们也看到了 itemgetter()
从功能 operator
模块可以使我们的解决方案更加简洁。
最后,我们调整了我们的解决方案以适用于低于 3.7 的 Python 版本。
的变化 sorted()
函数是按值对字典进行排序的最流行和最可靠的方法。