Python字典排序方法详解
本教程将深入探讨如何在Python中,依据键或值对字典进行排序。你将了解到如何根据自己的需求,重新组织字典的数据。
在Python编程中,字典是一种常用的数据结构。有时候,我们需要依据字典中的键或值对其内容进行排序。由于Python字典是键值对的映射,所以通常是通过创建一个新的字典来实现排序,新字典中的键或值会按照我们期望的顺序排列。
本教程将首先回顾Python字典的基础概念,然后详细讲解如何创建新的字典,使其内容按照键或值的顺序进行排序。
重新认识Python字典
什么是Python字典?
字典是Python内置的数据结构之一,它以键值对的形式存储数据。你可以使用键来查找对应的值。每个键都必须是唯一的,不能重复,以此确保能够准确地找到对应的值。
py_dict = {"Python":"很棒!","学习":True} py_dict["Python"] # 输出: 很棒! py_dict["学习"] # 输出: True
从功能上看,字典类似于哈希映射。它的元素并不一定是有序排列的。但是,只要你知道键,你就可以按照任何顺序访问字典的内容。
字典中元素的顺序
在较早的Python版本中,为了保持键的顺序,你需要使用有序字典。但是,从Python 3.7开始,字典会按照元素被添加到字典中的顺序来存储它们。这意味着你可以按照添加的顺序访问字典的元素。
现在,你已经掌握了Python字典的基本知识,接下来让我们一起学习如何创建字典的排序副本。
⚙️ 注意:本教程中的代码示例需要Python 3.7或更高版本才能正常运行。你可以下载最新版本的Python,或者在techblik.com的在线Python编辑器中运行这些示例。
如何按照键对Python字典进行排序
假设一家咖啡馆的甜点菜单如下图所示。菜单上有两列,一列是甜点的名称,另一列是它们对应的价格。
你可以使用Python字典来表示这个菜单,其中甜点的名称作为键,它们的价格作为值。
让我们创建一个名为`desserts`的字典,来表示这个甜点菜单,代码如下:
desserts = { "冰淇淋":10, "布朗尼":12, "芝士蛋糕":3, "瑞士卷":5, "曲奇":4, "杯子蛋糕":2 }
现在,我们来创建一个新的字典`sorted_desserts`,其中的甜点按照字母顺序排列。在原始的`desserts`字典中,甜点的名称是键。因此,你需要按照字母顺序对这些键进行排序来创建新的字典。
如何访问Python字典的键
为了实现这个目标,我们首先需要获取字典的所有键,然后对它们进行排序。
在Python中,你可以使用字典内置的`.keys()`方法来获取字典中所有键的列表。
让我们在`desserts`字典上调用`.keys()`方法来获取键,代码如下:
keys = desserts.keys() print(keys) #输出 ['冰淇淋', '布朗尼', '芝士蛋糕', '瑞士卷', '曲奇', '杯子蛋糕']
通过将这个列表作为参数传递给Python内置的`sorted()`函数,你会得到一个新的排序后的列表。
现在,让我们以键的列表作为参数调用`sorted()`函数,并将排序后的列表存储在变量`sorted_keys`中。
sorted_keys = sorted(keys) print(sorted_keys) # 输出 ['冰淇淋', '布朗尼', '杯子蛋糕', '曲奇', '瑞士卷', '芝士蛋糕']
现在,我们已经按照字母顺序对键进行了排序。我们可以使用`sorted_keys`中的键,在`desserts`字典中查找对应的值,代码如下:
sorted_desserts = {} for key in sorted_keys: sorted_desserts[key] = desserts[key] print(sorted_desserts) # 输出 {'冰淇淋': 10, '布朗尼': 12, '杯子蛋糕': 2, '曲奇': 4, '瑞士卷': 5, '芝士蛋糕': 3}
让我们详细解释一下上面的代码:
- 首先,将`sorted_desserts`初始化为空的字典。
- 然后,遍历排序后的键列表`sorted_keys`。
- 对于`sorted_keys`中的每一个键,我们在`desserts`字典中查找对应的值,并将其添加到`sorted_desserts`字典中。
使用for循环虽然能够实现排序,但在Python中,使用字典推导式可以更简洁地完成相同的任务。
Python中的字典推导式
Python支持使用字典推导式,类似于列表推导式。字典推导式让你只用一行代码就可以创建一个新的Python字典。
▶️ 这是在Python中使用字典推导式的一般结构。
# 1. 当你拥有两个列表,分别存储键和值时:list1, list2 new_dict = {key:value for key,value in zip(list1,list2)} # 2. 当你只有键,可以根据键查找值时 new_dict = {key:value for key in <可迭代对象>}
让我们使用上面代码块中的第二种结构:`new_dict = {key:value for key in <可迭代对象>}`,来创建`sorted_desserts`字典。
在这个例子中:
- 可迭代对象:列表`sorted_keys`
- key:我们通过`sorted_keys`循环访问的键
- value:从`desserts`字典中查找`key`对应的值,即`desserts[key]`
综上所述,我们得到了以下字典推导式的表达式:
sorted_desserts = {key:desserts[key] for key in sorted_keys} print(sorted_desserts) #输出 {'冰淇淋': 10, '布朗尼': 12, '杯子蛋糕': 2, '曲奇': 4, '瑞士卷': 5, '芝士蛋糕': 3}
从上面的输出可以看出,`sorted_desserts`字典中的甜点是按照名称的字母顺序排列的。
如何按照值对Python字典进行排序
接下来,我们将学习如何按照值对Python字典进行排序。
在`desserts`字典中,值对应的是甜点的价格。你可能希望按照价格对字典进行排序,无论是升序还是降序。
▶️ 你可以使用内置的字典方法`.items()`来获取所有的键值对。每一个键值对都会以元组的形式存储。
desserts.items() #输出 dict_items([('冰淇淋', 10), ('布朗尼', 12), ('芝士蛋糕', 3), ('瑞士卷', 5), ('曲奇', 4), ('杯子蛋糕', 2)])
每个键值对本身就是一个元组。你可以通过索引访问元组中的键和值。
dict_items = desserts.items() for item in dict_items: print(f"键:{item[0]},值:{item[1]}") # 输出 键:冰淇淋,值:10 键:布朗尼,值:12 键:芝士蛋糕,值:3 键:瑞士卷,值:5 键:曲奇,值:4 键:杯子蛋糕,值:2
因为我们想要按照值来排序,所以我们需要使用上面的方法来获取键值对中索引为1的值。
如何按照升序对Python字典的值进行排序
这次,我们将使用`sorted()`函数以及可选的`key`参数。`key`参数可以接收任何Python函数、内置函数、用户自定义的函数,甚至是lambda函数。
注意:`lambda args: expression`是在Python中定义lambda函数的语法。
在这个按照价格对甜点进行排序的示例中,我们需要访问字典中的元素(键值对)。我们将`key`设置为`lambda item:item[1]`,因为我们想按照值(价格)进行排序。
因为`sorted()`函数默认返回一个列表,所以你需要将其显式地转换为字典,如下所示:
sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1])) print(sorted_desserts) # 输出 {'杯子蛋糕': 2, '芝士蛋糕': 3, '曲奇': 4, '瑞士卷': 5, '冰淇淋': 10, '布朗尼': 12}
你也可以使用我们之前介绍过的字典推导式,代码如下:
sorted_desserts = {key:value for key, value in sorted(desserts.items(), key=lambda item:item[1])} print(sorted_desserts) # 输出 {'杯子蛋糕': 2, '芝士蛋糕': 3, '曲奇': 4, '瑞士卷': 5, '冰淇淋': 10, '布朗尼': 12}
在`sorted_desserts`中,价格为2美元的杯子蛋糕是第一项,而价格为12美元的布朗尼是最后一项。
如何按照降序对Python字典的值进行排序
如果你想按照价格降序对字典进行排序,你需要将可选参数`reverse`设置为`True`,代码如下:
sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1], reverse=True)) print(sorted_desserts) # 输出 {'布朗尼': 12, '冰淇淋': 10, '瑞士卷': 5, '曲奇': 4, '芝士蛋糕': 3, '杯子蛋糕': 2}
现在,`sorted_desserts`已经按照价格的降序排列,从价格最高的甜点布朗尼(12美元)开始。
总结👩🏽💻
让我们快速回顾一下本教程所学的知识:
- Python字典以键值对的形式存储数据,键必须是唯一的。
- 在对字典进行排序时,我们实际上是创建了一个新的字典,其中元素按照所需的顺序排列。
- 你可以分别使用字典内置的`.keys()`和`.items()`方法来获取所有的键和键值对。
- 你可以使用`sorted()`函数以及可选参数`key`和`reverse`来实现所需的排序方式。
既然你已经学习了如何对Python字典进行排序,接下来可以学习如何对Python列表进行排序。编码愉快!🎉