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

Python学习笔记评论字数 1437阅读模式

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)])

 

weinxin
我的微信
微信公众号
关注大鸟博客公众号
 
大鸟
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定