欢迎访问宙启技术站
智能推送

Python中字典排序函数的用法

发布时间:2023-06-18 22:03:29

Python中,字典是一种无序的数据类型,如果需要对字典进行排序,就需要使用特定的排序函数。这里介绍了Python中常用的字典排序函数及其用法。

1. sorted函数

Python中built-in的sorted函数可以对字典进行排序。sorted函数返回一个排序后的列表,每个元素是一个元组,元组包含了字典中的键和相应的值。可以根据键或者值进行排序重排。

首先看一下利用sorted函数按照字典的键进行排序的代码:

d = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5}  
sorted_d = sorted(d.items(), key=lambda x:x[0])  
print(sorted_d)

运行结果为:

[('five', 5), ('four', 4), ('one', 1), ('three', 3), ('two', 2)]

其中,sorted() 函数的 key 参数接受一个 key 函数,用于将每个元素进行排序,然后按照给定的key函数返回的结果进行排序重排。在这个例子中, key 函数就是 lambda 函数,用于取出元素第一个值,也就是字典的键。利用 lambda 函数,字典就可以按照键的方式进行排序。

如果想要根据字典的值进行排序,则修改一下 lambda 函数即可。具体代码如下:

# 按照字典的值进行排序
d = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5} 
sorted_d = sorted(d.items(), key=lambda x:x[1], reverse=True) 
print(sorted_d)

运行结果为:

[('five', 5), ('four', 4), ('three', 3), ('two', 2), ('one', 1)]

其中,reverse=True 表示逆序排列,也就是按照值进行降序排序。

2. itemgetter函数

itemgetter函数也可以用来进行字典排序。itemgetter会查询元素并返回所需的元素,因此它可以用作字典排序函数的参数。

itemgetter函数通常比lambda函数快,因为它是在底层C解释器中实现的。

以下是利用itemgetter函数按照字典的键或值进行排序的代码:

from operator import itemgetter 
d = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5}  
sorted_d = sorted(d.items(), key=itemgetter(0)) 
print(sorted_d)
sorted_d = sorted(d.items(), key=itemgetter(1),reverse=True) 
print(sorted_d)

输出结果分别是:

[('five', 5), ('four', 4), ('one', 1), ('three', 3), ('two', 2)]
[('five', 5), ('four', 4), ('three', 3), ('two', 2), ('one', 1)]

其中, itemgetter(0) 表示按照字典的键进行排序,而 itemgetter(1) 表示按照字典的值进行排序。

3. dict排序(不推荐)

在Python中,字典是无序的,但是如果需要对字典进行排序,可以通过将字典转换为元组的列表,然后对列表进行排序,最后将排序后的列表转换回字典。

比如,可以使用一下代码实现从大到小排序的方法:

#未排序的字典
mydict = {'carl':23, 'alan':42, 'bob':12, 'danny':13}
#转换为元组进行排序
dict_sorted = sorted(mydict.items(), lambda x,y: cmp(x[1], y[1]),reverse=True)
#转换为字典
sorted_dict = dict(dict_sorted)
print(sorted_dict)

运行结果为:

{'alan': 42, 'carl': 23, 'danny': 13, 'bob': 12}

但是这种方法可能会变得很慢,UNSORTED_DICT.items()返回包含元组的Python列表,每个元组包含了键和相应的值。在执行sorted函数时进行排序,结果是一个排序后的列表,每个元素是一个元组,元组包含了字典中的键和相应的值。最后使用dict转换成字典。

但是上文中代码存在错误,在lambda函数中,如果直接使用cmp函数,会提示未定义cmp()函数。但是在 Python 3.x 中,已经将 cmp() 函数删除了,因此上述方法在 Python 3.x 中将无法运行。

以上是Python中常用的几种对字典进行排序的方法,使用的场景不同,需要根据实际情况选择适合自己的方法。建议使用sorted或者itemgetter函数,它们的效率更高。