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

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}]


  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值