📜  python先按值排序,然后按字典键排序 - Python(1)

📅  最后修改于: 2023-12-03 15:34:27.676000             🧑  作者: Mango

Python先按值排序,然后按字典键排序

有时候我们需要对 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)