两招轻松实现 Python 字典排序的方法

AI算法与图像处理

共 2965字,需浏览 6分钟

 ·

2021-05-20 20:30

点击上方AI算法与图像处理”,选择加"星标"或“置顶”

重磅干货,第一时间送达



引言


Dictionary 是一种重要的数据结构,它通过将 key 与 value 进行映射来存储数据。Python 中的默认字典是无序数据结构。与列表一样,我们可以使用 sorted()函数按键对字典进行排序。但是,它只返回一个根据 key 排序的列表,这通常不是我们所希望的。我们可能希望它按 value 而不是按 key 进行排序,或者我们可能希望它返回一个已排序的字典而不是一个列表。在本文中,我将讨论两种简单的方法,我们可以使用这两种方法对 Python 字典进行排序,并返回您所希望的结果。


整理一个列表


既然我们在讨论排序,我想首先指出这两个排序函数之间的一个非常重要的区别。让我们来看看列表之间的区别。假设我们有两个列表:

我们有两种对列表进行排序的方法,一种是使用 sort()进行 in-place 排序,另一种是使用 sorted() ,这不是 in-place 排序。不同之处在于,当使用 sort()时,您将更改原始列表,而 sorted()将返回一个新列表,而不更改原始列表。如下所示:


选用哪一种取决于实际情况。例如,如果您想保留原始记录,那么您应该使用 sorted()。如果希望节省空间和内存,那么应该使用 sort()。


整理一个字典


让我们创建一个字典:

在这里使用“ zip”函数非常方便,我们将两个长度相同的列表中的元素映射到一起。


为了对字典进行排序,我们必须使用 sorted() ,因为字典没有内嵌的 sort()函数:

如果我们直接使用 sorted() ,函数将只返回字典中的 key 列表:

或者一个 value 列表:

我们可以调用字典中的 items()函数按 key 对它进行排序,并返回一个元组列表:

如果我们想按相反的顺序排序 key,我们可以在排序函数中指定它:

如果我们想要按 value 进行排序呢?有两种方法可以做到这一点。一种是使用 sorted() ,但是指定使用 lambda 函数进行排序的关键;另一种是不使用默认字典类型,而是使用不同的字典类型,直接按 value 对字典进行排序。


对于第一个方法,sorted 函数是使用一个 key 参数,用于指定在进行比较之前对每个元素调用的函数(或其他可调用的函数)。在这里,我们可以使用 lambda 函数来告诉 sorted()函数使用元素的哪一部分进行比较。具体来说:

Python 是零索引,因此 x[1]指定每个元素的第二部分是一个字典,它是值。如果你想要一个反向顺序,除了在 sorted()函数中添加一个反向参数,我们可以在 lambda 函数中使用一个负号:

但是,这种技巧只有在 value 值为数值变量时才有效。如果它是一个字符串变量,我们必须使用反向参数。


如果您有一个值为数值的字典,那么在创建字典时还可以使用不同的字典类型来直接对字典进行排序。字典类型可以是来自集合库的 Counter:


Counter 是一个 dict 子类,它是一个无序集合,其中元素作为字典的 key 存储,它们的计数作为字典的 value 存储。


创建 Counter 时,使用以下代码:

我们不创建默认字典,而是创建一个Counter。这是有用的,因为当我们想要按 value 对字典进行排序时,我们可以使用 most_common()函数:

当您希望返回按 value 降序排列的元组列表时,它非常有用。


集合库还有其他有趣的数据类型,如 OrderedDict,它保留插入的每个项的顺序。欲了解更多信息,可以查看这个网址:https://docs.python.org/2/library/collections.html#


返回一个已排序的字典


通常,在排序之后,我们会得到一个元组的排序列表。如果你想让它以字典的形式出现,你可以使用字典表达式来完成这项工作,这个功能很像列表表达式的操作:


·  END  ·


HAPPY LIFE

     



个人微信(如果没有备注不拉群!
请注明:地区+学校/企业+研究方向+昵称



下载1:何恺明顶会分享


AI算法与图像处理」公众号后台回复:何恺明,即可下载。总共有6份PDF,涉及 ResNet、Mask RCNN等经典工作的总结分析


下载2:终身受益的编程指南:Google编程风格指南


AI算法与图像处理」公众号后台回复:c++,即可下载。历经十年考验,最权威的编程规范!



   
下载3 CVPR2021

AI算法与图像处公众号后台回复:CVPR即可下载1467篇CVPR 2020论文 和 CVPR 2021 最新论文

点亮 ,告诉大家你也在看


浏览 38
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报