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)

 




 

posted @ 2020-11-25 00:57  minger_lcm  阅读(305)  评论(0编辑  收藏  举报