python字典排序的方法

  • Post category:Python

Python字典是一种无序容器,但是我们经常需要按照字典中某个键的值进行排序。本篇攻略将详细讲解Python字典排序的方法,包括使用内置函数sorted()、使用sorted()结合lambda函数、使用operator模块中的itemgetter方法,以及自定义函数进行排序。

使用内置函数sorted()

内置函数sorted()可以对包含多个元素的容器进行排序,该函数在排序时使用默认的比较运算符(小于号<)对元素进行比较,返回排序后的副本。

下面通过一个例子来演示如何使用sorted()对Python字典按照键排序:

>>> d = {'apple': 5, 'banana': 3, 'pear': 1, 'orange': 2}
>>> sorted(d.items())
[('apple', 5), ('banana', 3), ('orange', 2), ('pear', 1)]

上面的代码中,sorted()函数对字典的.items()方法返回的键值对列表进行排序。接着将排序后的列表返回,得到了一个按照字典键排序的新列表。

使用sorted()结合lambda函数

当我们需要根据字典值进行排序时,可以在sorted()函数中使用lambda函数来定义比较规则。

下面通过一个例子来演示如何使用sorted()结合lambda函数对Python字典按照值排序:

>>> d = {'apple': 5, 'banana': 3, 'pear': 1, 'orange': 2}
>>> sorted(d.items(), key=lambda x: x[1])
[('pear', 1), ('orange', 2), ('banana', 3), ('apple', 5)]

上面的代码中,sorted()函数在排序时,使用lambda函数作为比较规则,x[1]表示取键值对列表中的值,而不是键,即定义按照值进行排序。接着将结果返回,得到了一个按照字典值排序的新列表。

使用operator模块中的itemgetter方法

operator模块中的itemgetter方法可以用来获取字典的某个键对应的值,从而进行排序。

下面通过一个例子来演示如何使用itemgetter方法对Python字典按照值排序:

>>> import operator
>>> d = {'apple': 5, 'banana': 3, 'pear': 1, 'orange': 2}
>>> sorted(d.items(), key=operator.itemgetter(1))
[('pear', 1), ('orange', 2), ('banana', 3), ('apple', 5)]

上面的代码中,使用itemgetter(1)指定要按照键值对列表中的值进行排序。接着将结果返回,得到了一个按照字典值排序的新列表。

自定义函数进行排序

在有些极为复杂的排序场景下,我们还可以通过自定义比较函数的方式来进行排序。

下面通过一个例子来演示如何使用自定义函数对Python字典按照值排序:

>>> d = {'apple': 5, 'banana': 3, 'pear': 1, 'orange': 2}
>>> def by_value(item):
...     return item[1]
... 
>>> sorted(d.items(), key=by_value)
[('pear', 1), ('orange', 2), ('banana', 3), ('apple', 5)]

上面的代码中,定义一个名为by_value()的函数用于获取字典的某个值,然后通过sorted()函数中的key参数将定义好的比较函数应用到字典中并进行排序。

以上便是Python字典排序的几种方法。快去试一试吧。