都是排序方法
区别:1、sort函数是应用到list上的,属于列表的成员方法,sorted可以对所有的可迭代对象进行排序操作。
2、list的sort方法返回的是对已经存在的列表进行操作,无返回值;而内建函数sorted返回的是一个新的列表,不是在原来的基础上进行操作。
3、sort的使用方法是list.sort(),sorted的使用方法是sorted(list)。
语法: 1、sort语法原型:list.sort(fun, key=None, reverse=Flase)
(1) 参数fun是表明此sort函数是基于何种算法进行排序的,一般默认情况下python中用的是归并排序,并且一般情况下我们是不会重写此参数的,所以基本可以忽略;
(2) 参数key用来指定一个函数,此函数在每次元素比较时被调用,此函数代表排序的规则,也就是你按照什么规则对你的序列进行排序;一般用lambda函数指定。
(3) 参数reverse指定排序规则,reverse=True(升序),reverse=Flase(降序),默认降序。
举例:
ls = list([('wo',1,9),('shi',2,6),('guo',3,7),('欣喜的自行车',4,5)])#使用默认参数进行排序,即按照元祖第一个元素进行排序(默认升序)ls.sort()print(ls)[('guo', 3, 7), ('shi', 2, 6), ('wo', 1, 9), ('欣喜的自行车', 4, 5)]#降序情况ls.sort(reverse=True)print(ls)[('欣喜的自行车', 4, 5), ('wo', 1, 9), ('shi', 2, 6), ('guo', 3, 7)]#使用匿名函数lambda重写key,按照元祖的第二个元素进行排序ls.sort(key=lambda x :(x[1]))print(ls)[('wo', 1, 9), ('shi', 2, 6), ('guo', 3, 7), ('欣喜的自行车', 4, 5)]#使用匿名函数重写key所代表的函数,先按照元组中下标为1的进行排序,#对于下标2处元素相同的,则按下标为0处的元素进行排序ls.sort(key=lambda x :(x[1],x[0]))print(ls)[('wo', 1, 9), ('shi', 2, 6), ('guo', 3, 7), ('欣喜的自行车', 4, 5)] 2、sorted语法原型:sorted(iterable, key=None, reverse=Flase)
(1) 参数iterable是可迭代对象
(2) 参数key用来指定一个函数,此函数在每次元素比较时被调用,此函数代表排序的规则,也就是你按照什么规则对你的序列进行排序;一般用lambda函数指定。
(3) 参数reverse指定排序规则,reverse=True(升序),reverse=Flase(降序),默认降序。
说明:sort只能对列表进行排序,而sorted可以对任何可迭代对象进行排序
字典:1、按照key值排序
dic = {1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}sorted(dic) #默认直接对字典的键进行排序[1, 2, 3, 4, 5]#也可以这样,结果一样sorted(dic.keys())[1, 2, 3, 4, 5]2、按照value排序
dic = {1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}sorted(dic.items(), key=lambda x : (x[1]))[(5, 'A'), (2, 'B'), (3, 'B'), (1, 'D'), (4, 'E')]items()实际上是将dic转换成可迭代的对象(即元组),为[(1,'D'),(2,'B'),(3,'B'),(4,'E'),(5,'A')] ,items()方法将字典的元素转成了元组。注意排序后的返回值是一个list,而原字典中的名值对被转换为了list中的元组。
lis = [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}]sorted(lis, key=lambda x :(x['age']))[{'age': 10, 'name': 'c'}, {'age': 20, 'name': 'a'}, {'age': 25, 'name': 'b'}]