Python sorted 函数 排序
>>> lst = [1,2,3,100,200,200,100] >>> >>> sorted(lst) [1, 2, 3, 100, 100, 200, 200]
加上reverse=True 反转排序 从高到低排序
>>> sorted(lst, reverse=True)
[200, 200, 100, 100, 3, 2, 1]
包含字典dict的列表list的排序方法
方法1:使用 operator进行排序
import operator list1 = [{'name': 'Kevin', 'age': 27}, {'name': 'Ling', 'age': 23}] # 升序 list2 = sorted(list1, key=operator.itemgetter('age')) print("开始列表:{}".format(list1)) print("升序后列表:{}".format(list2)) # 降序 list2 = sorted(list1, key=operator.itemgetter('age'), reverse=True) print("开始列表:{}".format(list1)) print("降序后列表:{}".format(list2))
方法1:使用 lambda 进行排序
list1 = [{'name': 'Kevin', 'age': 27}, {'name': 'Ling', 'age': 23}] # 升序 list2 = sorted(list1, key=lambda list1: list1["age"]) print("开始列表:{}".format(list1)) print("升序后列表:{}".format(list2)) # 降序 list2 = sorted(list1, key=lambda list1: list1["age"], reverse=True) print("开始列表:{}".format(list1)) print("降序后列表:{}".format(list2))
四. 包含字典dict的列表list的排序方法与dict的排序类似,如下:
x = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}] sorted_x = sorted(x, key=operator.itemgetter('name')) print sorted_x #[{'age': 10, 'name': 'Bart'}, {'age': 39, 'name': 'Homer'}] sorted_x = sorted(x, key=operator.itemgetter('name'), reverse=True) print sorted_x #[{'age': 39, 'name': 'Homer'}, {'age': 10, 'name': 'Bart'}] sorted_x = sorted(x, key=lambda x : x['name']) print sorted_x #[{'age': 10, 'name': 'Bart'}, {'age': 39, 'name': 'Homer'}] 5. sorted_x = sorted(x, key=lambda x : x['name'], reverse=True) print sorted_x #[{'age': 39, 'name': 'Homer'}, {'age': 10, 'name': 'Bart'}]
使用sorted()函数对列表中的字典元素按值排序
在由字典(dict)元素组成的列表(list)里,根据字典的某个key排序list中的所有元素.
sorted高阶函数语法格式:sorted(可迭代对象,key=函数名,reverse=False/True)
sorted排序方法的详细解释:
作用:从可迭代对象中,依次取出一个元素,该元素再按照key规定的排列依据排序。
可迭代对象:即可依次取值的对象,例如:集合,序列(列表,字符串,元组),字典等。
key : 是列表排列的依据,一般可以自定义一个函数返回排序的依据,再把函数名绑定给key。
reverse : 译为反转,reverse默认等于False,从小到大排序。等于True时,从大到小排序。
匿名函数lambda的格式: 函数名 = lambda [形参1,形参2,…] : ,返回操作语句块产生的结果并绑定给函数名。
例如: key=lambda x : x[1]
x: 相当于字典集合中的一个元组, 例:dict_items([(‘a’, 1), (‘c’, 3), (‘b’, 2)])中的(‘a’, 1)或(‘c’, 3)或(‘b’, 2)
x[1]: 返回x中的第二个元素,即键值对元组中的值。dict_items([(‘a’, 1), (‘c’, 3), (‘b’, 2)])中的1或2或3
注意:
(1) sorted函数中的可迭代对象不要用字典d,那样只能迭代出的字典d的键。要用d.items()才可迭代出字典的键值对。
例:不能用 d_order=sorted(d,key=lambda x:x[1],reverse=False),
要用 d_order=sorted(d.items(),key=lambda x:x[1],reverse=False)。
(2) sorted函数排好序后,要绑定一个对象(赋值),例:d_order=sorted(d.items(),key=lambda x:x[1],reverse=False)
因为字典是无序类型,用sorted函数排好序后不绑定d_order,字典会自动打乱顺序。
动手试一试
例1:
list = [{"day":2},{"day":1},{"day":3}] print("list: ", list) new_list = sorted(list, key=lambda k: k['day']) print("sorted_list: ",new_list)
例2:
info = [{'x': 4020, 'y': 9962, 'w': 28, 'h': 239, 'p': 0.10}, {'x': 20354, 'y': 24820, 'w': 434, 'h': 455, 'p': 0.15}, {'x': 12434, 'y': 19812, 'w': 585, 'h': 77, 'p': 0.88}, {'x': 15488, 'y': 18871, 'w': 584, 'h': 649, 'p': 0.72399}, {'x': 4026, 'y': 18528, 'w': 165, 'h': 302, 'p': 0.17}, {'x': 15003, 'y': 6246, 'w': 615, 'h': 197, 'p': 0.10}, {'x': 9292, 'y': 5370, 'w': 84, 'h': 670, 'p': 0.67}, {'x': 18775, 'y': 22074, 'w': 659, 'h': 711, 'p': 0.43}] print("list: ",info) new_info = sorted(info, key=lambda k: k['p'], reverse=True) print("sorted_list: ",new_info)