文章目录
展开
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)])