sorted()与sort()的区别:
1.sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
2.list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
格式:sorted(iterable, cmp=None, key=None, reverse=False)
iterable:可迭代对象。
cmp:比较的函数(一般省略)。
key:主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。常用的用来作为参数key的函数有 lambda函数和operator.itemgetter()。尤其是列表元素为多维数据时,需要key来选取按哪一位数据来进行排序。
reverse:排序规则,reverse = True 降序 , reverse = False 升序(默认)。
返回值:返回重新排序的列表,形式与输入一致。
举例:
(1)lambda函数作为参数key:
list = ['a', 'bc', 'defg', 'handsome', 'qwerrtyyuu']
print(sorted(list,key=lambda x:len(x),reverse=True))
# Output:
# ['qwerrtyyuu', 'handsome', 'defg', 'bc', 'a']
(2)operator.itemgetter()作为参数key:
import operator
tuple_list = [('A', 1,5), ('B', 3,2), ('C', 2,6)]
print(sorted(tuple_list, key=operator.itemgetter(1) ))#即按照第1维进行排序
# Output:
# [('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]
(3)Python中对键值对进行输出和排序
d= {'a':24,'g':52,'i':12,'k':33}
# 以列表形式输出字典d的key
# d.items()为字典d的键值对
b1=[key for key,value in d.items()]
print(b1)
# 以列表的形式输出字典d的value
b2={value for key,value in d.items()}
print(b2)
# 颠倒字典d的key:value位置
b3={value : key for key,value in d.items()}
print(b3)
# 将字典d按value的值进行排序
b4=sorted(d.items(), key=lambda x: x[1])
print(b4)
输出结果:
['a', 'g', 'i', 'k']
{24, 33, 52, 12}
{24: 'a', 52: 'g', 12: 'i', 33: 'k'}
[('i', 12), ('a', 24), ('k', 33), ('g', 52)]
解析:代码sorted(d.items(), key=lambda x: x[1]) 中:
d.items() 为待排序的对象(键值对);
key=lambda x: x[1] 为对前面的对象中的第二维数据(即value)的值进行排序。
key=lambda 变量:变量[维数] 。维数可以按照自己的需要进行设置。这里lambda是匿名函数,指一类无需定义标识符(函数名)的函数或子程序。lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。
此外,对列表生成式b1=[key for key,value in d.items()]的理解:
(key,value)可以看成前面的d.items,for前面的key为获取前面的名字;
(4)lambda维数与字符串表示:
# 将列表中的age由大到小排序
alist = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]
b=sorted(alist,key=lambda x:x['age'],reverse=True)
print(b)
输出结果:
[{'name': 'b', 'age': 30}, {'name': 'c', 'age': 25}, {'name': 'a', 'age': 20}]