【Python】sort与sorted用法比较,以及对字典进行排序

sort排序

l = [2, 4, 1, 3, 8]
l.sort()
l
Out[19]: [1, 2, 3, 4, 8]

sort()的用法是:list.sort()

 因此,使用sort会直接对list本身进行修改,不会保留原来的list。

在Python中使用help查看sort使用方法:

help(list.sort)
Help on method_descriptor:
sort(...)
    L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE*

(1)  key参数

key接受一个函数,这个函数只接受一个元素,形式如下

def f(a):
     return len(a)

key接受的函数返回值,表示此元素的权值,sort将按照权值大小进行排序。

(2) reverse参数

接受False 或者True 表示是否逆序,默认为false


举例如下:

L = [{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
def f(x):
    return len(x)
L.sort(key=f)
---------------------------------------------------------------
print(L)
[{1: 9}, {1: 5, 3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}]

sorted排序:

l = [2, 4, 1, 3, 8]
sorted(l)
Out[27]: [1, 2, 3, 4, 8]
l
Out[28]: [2, 4, 1, 3, 8]

可见,使用sorted排序的时候并未改变list本身。


sorted还可以对字典进行排序,但是默认是对key值进行排序的,返回的是对key值排好的list。

a = {'dadadsadfas': 0, 'awdawd': 1}
sorted(a)
Out[30]: ['awdawd', 'dadadsadfas']

要根据其他的值来排序的话,就要用到sorted的key参数了。

a = {'dadadsadfas': 0, 'awdawd': 1}
sorted(a)
#默认输出
Out[30]: ['awdawd', 'dadadsadfas']

result2 = sorted(a, key=lambda x:a[x])
#根据value值进行的排序
result2
Out[32]: ['dadadsadfas', 'awdawd']

sorted还有一个用法就是对复杂的元组进行排序,与对字典排序有点类似:

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] 
sorted(students, key=lambda student : student[2])
Out[34]: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

 

lambda用法:

lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数

lambda所表示的匿名函数的内容应该是很简单的,如果复杂的话,干脆就重新定义一个函数了,使用lambda就有点过于执拗了。

lambda就是用来定义一个匿名函数的,如果还要给他绑定一个名字的话,就会显得有点画蛇添足,通常是直接使用lambda函数。如下所示:

add = lambda x, y : x+y
add(1,2)  # 结果为3

所以上面的例子其实就是定义了一个函数:

def f(student):
    return student[2]

然后将元组一个一个输入进去并比较返回值,根据返回值进行排序。

 

 

参考链接:

https://www.cnblogs.com/hf8051/p/8085424.html

https://www.cnblogs.com/sysu-blackbear/p/3283993.html

https://www.cnblogs.com/JahanGu/p/7650109.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值