sorted
sorted为内置函数,为iterable排序, 返回一个新的列表
sorted(iterable, /, *, key=None, reverse=False)
key 指定带有单个参数的函数,用于从iterable的每个元素中提取用于比较的键,key是一个函数,他的参数是iterable的单个元素,然后返回比较的键
对列表进行排序
简单结构的列表排序比较简单,直接比较数字的大小,不需要执行key
list1=[1,3,6,0,4,5]
print(sorted(list1))
运行结果:
[0, 1, 3, 4, 5, 6]
对字典进行排序
对字典的排序,返回的是字典的key排序后的结果
d1={1: 'D', 2: 'B', 3: 'B', 6: 'E', 5: 'A'}
print(sorted(d1))
运行结果:
[1, 2, 3, 5, 6]
字典列表排序
若排序时不指定比较的键也就是key,会报错,因为dict之间是无法比较的
lst2=[{"name":"wang","age":12},{"name":"xiaohong","age":16},{"name":"xiaogang","age":14}]
print(sorted(lst2))
运行结果:
TypeError: '<' not supported between instances of 'dict' and 'dict'
编写一个函数,参数是lst2的单个元素,返回要比较的键,比较时,sorted会将dict1逐一替换成{“name”:“wang”,“age”:12}等
lst2=[{"name":"wang","age":12},{"name":"xiaohong","age":16},{"name":"xiaogang","age":14}]
def com_with_age(dict1):
return dict1['age']
print(sorted(lst2,key=com_with_age))
运行结果:
[{'name': 'wang', 'age': 12}, {'name': 'xiaogang', 'age': 14}, {'name': 'xiaohong', 'age': 16}]
因为com_with_age是单个参数的函数,也只有return一个语句,可以改写为lamda表达式
lst2=[{"name":"wang","age":12},{"name":"xiaohong","age":16},{"name":"xiaogang","age":14}]
print(sorted(lst2,key=lambda x:x['age']))
元祖列表的排序
lst3=[("wang",12),("xiaohong",16),("xiaogang",14)]
print(sorted(lst3,key=lambda x:x[1]))
运行结果:
[('wang', 12), ('xiaogang', 14), ('xiaohong', 16)]