标签: 排序

Python使用sorted函数对字典进行排序

sorted(sys.values())sorted函数默认是根据键key排序的,所以想要根据值value排序,就需要在sys后面使用values(),获取字典的value值

new_sys2 = sorted(sys.items(), key=lambda d: d[1], reverse=False)其中d == (‘name’, ‘张三’) 或 (‘age’, ‘十八’)或(‘gender’, ‘man’), d[1]是获取每个元组中的第二个元素,就是原sys字典中的value;并将匿名函数的返回值返回给sorted函数的key参数

python 排序 sort和sorted的区别,使用和坑

python sort和sorted的区别,使用和坑

sort和sorted区别:

(本文根据B站up主码农高天的视屏整理)

sort跟sorted都是python自带的排序函数,两者的使用方法基本一致。
最大的区别是sort会改变原有列表,而sorted不会改变原有列表并且会返回一个新列表。

sort 和sorted的使用:

a = [1,25,2,5,4,3,6]
b = sorted(a)
print(a)
print(b)
a.sort()
print(a)

打印结果如下,sort改变了原有列表,而sorted没有

我们在使用sort和sorted的时候可以搭配匿名函数使用,这种方法使用的频率较高,一定要掌握

# lst[lst] with sort
a = [[‘xueling’,0],[‘yujie’,2],[‘aitty’,1],[‘xls’,2]]
a.sort(key=lambda x:x[1],reverse=True)
print(a)
# 通过匿名函数来指定key,实现对lst中第二项进行排序

运行结果: [[‘yujie’, 2], [‘xls’, 2], [‘aitty’, 1], [‘xueling’, 0]]

往高处延伸

有时候我们会遇到两次排序的问题:
1,先根据数的次数进行排序
2,当数字相同时根据数的大小从大到小进行排序

我们可以这样写:

b = [2,3,3,2,3,1,4]
b = sorted(b,key=lambda x:(b.count(x),x),reverse=True)
print(b)

运行结果:[3, 3, 3, 2, 2, 4, 1]

sort 的坑

当然,我们也可以用sort来写

b.sort(key=lambda x:(b.count(x),-x))
print(b)

运行结果:[4, 3, 3, 3, 2, 2, 1]
我们发现使用sort运行的结果是错误的,这其实是sort本身编写的问题,涉及底层的架构,所以我们在写sort发现错误的时候,可以尝试把它改写成sorted来判断是不是我们代码本身的错误,sorted是不会错的。

这种错误,其实只会在sort二次排序时才会出现,像key=lambda x:x[1]这样的是不会出现排序错误的。
sort的这种错误,可以说是python的一个bug吧。