python学习 -- operator.itemgetter(), list.sort/sorted 以及lambda函数
Python 中有非常方便高效的排序函数,下面主要介绍如何sort/sorted对list,dict进行排序。
1. 用list.sort /sorted 对list of tuples中第二个值进行排序
1 2 3 4 5 6 7 8 9 10 11 | >>> import operator >>> a = [( 'a' , 3 ),( 'b' , 2 ),( 'c' , 1 )] >>> import operator >>> l = [( 'a' , 3 ),( 'b' , 2 ),( 'c' , 1 )] >>> l.sort(key = operator.itemgetter( 1 )) >>> l [( 'c' , 1 ), ( 'b' , 2 ), ( 'a' , 3 )] >>> sorted (l, key = operator.itemgetter( 1 )) [( 'c' , 1 ), ( 'b' , 2 ), ( 'a' , 3 )] >>> sorted (l, key = operator.itemgetter( 0 )) [( 'a' , 3 ), ( 'b' , 2 ), ( 'c' , 1 )] |
list.sort 和sorted 的区别:sort是list序列的一个方法,而sorted是内建函数
list.sort: 没有返回值,而且 sort作为序列的内部函数,调用完后会对调用的序列进行排序
sorted:函数不改变参数,并返回排好序的序列副本
在python开发文档中对sort和sorted都有详细介绍,也可以调用help函数来查看两者的区别
>>> help(list.sort)
Help on method_descriptor:
sort(...)
L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*
>>> help(sorted) Help on built-in function sorted in module builtins: sorted(iterable, /, *, key=None, reverse=False) Return a new list containing all items from the iterable in ascending order. A custom key function can be supplied to customize the sort order, and the reverse flag can be set to request the result in descending order.
2. 除了用operator之外我们也可以用lambda
>>> l.sort(key=lambda x:x[1]) >>> l [('c', 1), ('b', 2), ('a', 3)]
3. 用sorted来对ditionary进行排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | >>> l = { 'a' : 3 , "b" : 2 , "c" : 1 } >>> sl_key = sorted (l.items()) #Sort by key >>> sl_key [( 'a' , 3 ), ( 'b' , 2 ), ( 'c' , 1 )] >>> sl_value = sorted (l.items(),key = lambda x:x[ 1 ]) #Sort by value >>> sl_value [( 'c' , 1 ), ( 'b' , 2 ), ( 'a' , 3 )] >>> sl_value = sorted (l.items(),key = lambda x:x[ 1 ], reverse = True ) #Sort by value Backwards >>> sl_value [( 'a' , 3 ), ( 'b' , 2 ), ( 'c' , 1 )] >>> sl_value = sorted (l.items(),key = lambda x:(x[ 1 ],x[ 0 ]), reverse = True ) #Sort by value then by Key >>> sl_value [( 'a' , 3 ), ( 'b' , 2 ), ( 'c' , 1 )] |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端