python——sorted函数、sort函数以及operator.itemgetter的使用

来源:互联网 发布:路由器mac 编辑:程序博客网 时间:2024/06/11 18:17

sort()vs sorted():

  1.  sort()是Python列表的一个内置的排序方法,list.sort() 方法排序时直接修改原列表,返回None;
  2. sorted()是Python内置的一个排序函数,它会从一个迭代器返回一个排好序的新列表。(注意:即使是不可变的元组也可以进行排序,最后返回排序后的列表)

 

相比于 sort(),sorted() 使用的范围更为广泛,但是如果不需要保留原列表,sort更有效一点。另外,sort() 只是列表的一个方法,只适用于列表,而sorted() 函数接受一切迭代器,返回新列表。

 

两者的函数形式如下:

sorted(iterable[, key][, reverse]) list.sort(*, key=None, reverse=None)


参数说明:

key是带一个参数的函数,返回一个值用来排序,默认为 None。

reverse表示排序结果是否反转

 

示例如下:

a =(55,12,7,3,234,56,21)#a.sort()# a 是元组,故不能用sort 进行排序print(sorted(a))#元组也可以用sorted进行排序#out:[3,7, 12, 21, 55, 56, 234] a =[55,12,7,3,234,56,21]print(sorted(a))#out:[3,7, 12, 21, 55, 56, 234]print(a)#使用sorted排序不改变原列表#out:[55,12,7,3,234,56,21] a.sort()print(a)#a.sort() 直接修改原列表#out:[3,7, 12, 21, 55, 56, 234]


在排序方面sorted()函数的功能非常强大,下面我们通过例子来说明:

1、对字典进行排序

mydict= {5: 'D', 7: 'B', 3: 'C', 4: 'E', 8: 'A'}print(sorted(mydict))#按字典键值排序#out:[3,4, 5, 7, 8]print(sorted(mydict.values()))#按字典值排序#out:['A','B', 'C', 'D', 'E']

#也可以按照下面这种方式进行排序,如果字典的值是一个列表的话,可以对列表进行多参数排序print(sorted(mydict.items(),key=operator.itemgetter(0)))#out:[(3,'C'), (4, 'E'), (5, 'D'), (7, 'B'), (8, 'A')]

2、对tuple组成的list进行排序

students= [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),]sorted(students,key=lambda student : student[2])   # sortby age#out:[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]sorted(students,key=itemgetter(2))  # sort by age#out:[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]sorted(students,key=itemgetter(1,2))  # sort by gradethen by age#out:[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]


注意多条件排序:参数key指定的函数返回一个元组,多条件排序的顺序将按照元组的顺序。

 

3、对dict组成的list进行排序

info= [{'ID':11,'name':'lili','age':20},        {'ID':2,'name':'jobs','age':40},        {'ID':22,'name':'aces','age':30},        {'ID':15,'name':'bob','age':18}]
print(sorted(info,key=lambdax:x['ID'])) #sort by ID#out:[{'ID':2, 'name': 'jobs', 'age': 40}, {'ID': 11, 'name': 'lili', 'age': 20}, {'ID':15, 'name': 'bob', 'age': 18}, {'ID': 22, 'name': 'aces', 'age': 30}]print(sorted(info,key=itemgetter('age')))#sort by ID#out:[{'ID':15, 'name': 'bob', 'age': 18}, {'ID': 11, 'name': 'lili', 'age': 20}, {'ID':22, 'name': 'aces', 'age': 30}, {'ID': 2, 'name': 'jobs', 'age': 40}] #多级排序print(sorted(info,key=lambdax:(x['name'],x['age'])))print(sorted(info,key=itemgetter("name",'age')))#out:[{'ID': 22, 'name': 'aces', 'age': 30}, {'ID': 15, 'name': 'bob', 'age': 18},{'ID': 2, 'name': 'jobs', 'age': 40}, {'ID': 11, 'name': 'lili', 'age': 20}]


阅读全文
0 0
原创粉丝点击