Python字典排序技巧:两种实用方法详解

引言

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

整理一个列表

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

abafba063dc9482d3a7b842151a99c1f.png

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

0f9ed95c2bb86f7f660efe9dd85609c4.png

0bebc6ee5001d129635d911a10e31da7.png

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

整理一个字典

让我们创建一个字典:

3446f10bdf3f4243d217c860e96ad687.png

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

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

2b4dfee93c4ddecc70951eac89565448.png

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

d94544cc46668f2f4c911cb85c7beaf1.png

或者一个 value 列表:

cfcca86541aac80e353df966e56b0a62.png

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

d0241de7d4836987781eca3a4930c0fb.png

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

fb7a07f21233b3f5f4f4dc0baf3a4d35.png

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

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

41b5bebe43afc1106d97372e24e5f2cb.png

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

d2937e6cb9adc957de09a3f1b093b2f7.png

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

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

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

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

25e361b01856c9a16986928c8e1fc07e.png

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

5a6cca2637fca9fc1c4b337dd48637ab.png

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

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

返回一个已排序的字典

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

7cd0e43fde3b733f46d1c4ffce4c5806.png

·  END  ·

HAPPY LIFE

026669a4e2f1072da7fdf2993cafc2c6.png

物联沃分享整理
物联沃-IOTWORD物联网 » Python字典排序技巧:两种实用方法详解

发表评论