📅  最后修改于: 2023-12-03 15:34:27.676000             🧑  作者: Mango
有时候我们需要对 Python 字典进行排序。如果字典中的值是数字类型,我们可以先对值进行排序,然后再按照字典键进行排序。下面是处理此类问题的 Python 代码:
my_dict = {'a': 10, 'b': 5, 'c': 30, 'd': 20}
sorted_dict_values = sorted(my_dict.items(), key=lambda x: x[1])
sorted_dict = {k:v for k, v in sorted(sorted_dict_values)}
print(sorted_dict)
代码输出:
{'b': 5, 'a': 10, 'd': 20, 'c': 30}
为了按照值排序,我们使用了 Python 内置的 sorted
函数,并将 items()
方法的返回值传入。在排序时,我们使用了一个 lambda 函数,该函数接受当前的键-值对 x
作为输入并返回该键-值对的值 x[1]
。这意味着在对键-值对进行排序时,将使用其值进行比较而不是键。最终返回了排好序的 sorted_dict_values
列表。
我们接着使用一个字典推导式来将刚刚排序好的列表转换回字典,该字典将按照已排序的值和键的顺序组织。
如果你想以从大到小的顺序对字典的值进行排序,那么可以在 lambda 函数中使用负的 x[1]
。例如:
my_dict = {'a': 10, 'b': 5, 'c': 30, 'd': 20}
sorted_dict_values = sorted(my_dict.items(), key=lambda x: -x[1])
sorted_dict = {k:v for k, v in sorted(sorted_dict_values)}
print(sorted_dict)
代码输出:
{'c': 30, 'd': 20, 'a': 10, 'b': 5}
在这个例子中,基于的 lambda 函数 -x[1] 返回给定键-值对的负值,意味着值会以从大到小的顺序进行排序。
接下来,我们要根据字典的键进行排序。为此,我们可以使用类似的技术,但是使用另一个关键字参数 key
并传入一个 lambda 函数,该函数将返回给定键-值对中的键(而不是值)。例如:
my_dict = {'a': 10, 'c': 5, 'b': 20, 'd': 30}
sorted_dict_keys = sorted(my_dict.items(), key=lambda x: x[0])
sorted_dict = {k:v for k, v in sorted(sorted_dict_keys)}
print(sorted_dict)
代码输出:
{'a': 10, 'b': 20, 'c': 5, 'd': 30}
在这里,我们传入一个 lambda 函数,该函数接受给定键-值对 x
并返回其键 x[0]
。这意味着我们将按字典键排序而不是按值排序。
注意,如果字典键是字符串,则此类排序将按字典序进行排序。如果键是其他类型,则排序将按照它们的顺序进行。
我们可以在前面的示例中向 sorted
函数添加 reverse=True
关键字参数,以便倒序排序字典键:sorted_dict_keys = sorted(my_dict.items(), key=lambda x: x[0], reverse=True)