Python根据字典中的值进行排序的3种方法

Python中如果要对字典的values值进行排序的话,还是简单的,有好几种方法可以实现,大鸟这里把自己平时用的3种方法记录下来。

实列:

一个uid的字典,如下:

 uid = {
        "a": 10003,
        "b": 10004,
        "c": 10001,
        "d": 10002
        }

要求:

请根据字典中的值进行从小到大的排序,获得排序后的新字典 sorted_uid,排序后的结果如下:

{'c': 10001, 'd': 10002, 'a': 10003, 'b': 10004}

实现:

第一种方法:

使用key使用lambda匿名函数取value进行排序

a = dict(sorted(uid.items(), key=lambda x: x[1]))

这里延伸一下,如果要是从大到小排列,可以这样。

a1 =dict(sorted(uid.items(),key = lambda x:x[1],reverse = True))

得到结果:

{'b': 10004, 'a': 10003, 'd': 10002, 'c': 10001}

第二种方法

使用operator的itemgetter进行排序

import operator
b = dict(sorted(uid.items(), key=operator.itemgetter(1)))
#输出结果
{'c': 10001, 'd': 10002, 'a': 10003, 'b': 10004}

第三种方法:

使用字典推导式来实现。

c = {key:value for (value, key) in sorted(zip(uid.values(), uid.keys()))}
#输出结果
{'c': 10001, 'd': 10002, 'a': 10003, 'b': 10004}

其他

如果要对key进行排序,可以这样。

key使用lambda匿名函数按键进行排序
a2 = sorted(uid.items(),key = lambda x:x[0])

或者这样。

# 第三种方法讲key和value分装成元祖,在进行排序
f = zip(uid.keys(), uid.values())
c = sorted(f)
#结果
[('a', 10003), ('b', 10004), ('c', 10001), ('d', 10002)]

sorted方法原理

我们在idle中输入help(sorted),如下:

 help(sorted)
Help on built-in function sorted in module builtins:

sorted(iterable, /, *, key=None, reverse=False)
#返回一个新列表,其中包含迭代中所有项目的升序排列。 可以提供自定义键功能以自定义排序顺序,并且可以设置反向标志以按降序请求结果。

sorted() 函数对所有可迭代的对象进行排序操作。

sort 与 sorted 区别:

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

dict.items()

dict.items() 以列表返回可遍历的(键, 值) 元组数组。比如:

uid = { "a": 10003, "b": 10004, "c": 10001, "d": 10002 }
uid.items()
dict_items([('a', 10003), ('b', 10004), ('c', 10001), ('d', 10002)])

 


【AD】DMIT美国洛杉矶Pro VPS套餐,$14.9/月起,1G-10Gbps带宽/CN2 GIA线路/有高防GIA可选
【AD】美国洛杉矶CN2 VPS/香港CN2 VPS/日本CN2 VPS推荐,延迟低、稳定性高、免费备份_搬瓦工vps