使用Python实现各种排序,比如dict的按key和value排序,list嵌套dict排序
考虑到tuple在排序时和list的区别并不大,所以不考虑tuple;
而dict的key采用hash实现,仅仅对dict进行排序并无实际意义,所以仅考虑需要输出等情况下的dict排序实现。
函数
sorted
sorted函数原型
1
| sorted(iterable[,key][,reverse])
|
sorted()可以接受3个参数,需要排序的变量必不可少,然后是key指定排序的元素,reverse指定是否逆序
lambda
lambda是匿名函数
一般形式
1
| lambda arguments:expression
|
函数形式
1 2
| def <lambda>(arguments): return expression
|
排序
简单list排序
1 2 3 4 5
| lis = ['a', 'b', 'c'] print(sorted(lis))
print(sorted(lis, reverse=True))
|
dict按照key排序
1 2 3 4 5
| dic = {'c': 1, 'b': 2, 'a': 3} print(sorted(dic))
print(sorted(dic, reverse=True))
|
dict按照value排序
1 2 3 4 5
| dic = {'c': 1, 'b': 2, 'a': 3} print(sorted(dic, key=lambda k: dic[k]))
print(sorted(dic, key=lambda k: dic[k], reverse=True))
|
list嵌套list排序
1 2 3 4 5 6 7 8 9 10 11 12
| lis = [[4, 2, 9], [1, 5, 6], [7, 8, 3]] print(sorted(lis, key=lambda k: k[0]))
print(sorted(lis, key=lambda k: k[1]))
print(sorted(lis, key=lambda k: k[2]))
print(sorted(lis, key=lambda k: k[0], reverse=True))
|
dict嵌套dict排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| lis = [ {'x': 3, 'y': 2, 'z': 1}, {'x': 2, 'y': 1, 'z': 3}, {'x': 1, 'y': 3, 'z': 2}, ] print(sorted(lis, key=lambda k: k['x']))
print(sorted(lis, key=lambda k: k['y']))
print(sorted(lis, key=lambda k: k['z']))
print(sorted(lis, key=lambda k: k['x'], reverse=True))
|
dict嵌套list排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| dic = { 'a': [1, 2, 3], 'b': [2, 1, 3], 'c': [3, 1, 2], } print(sorted(dic, key=lambda k: dic[k][0]))
print(sorted(dic, key=lambda k: dic[k][1]))
print(sorted(dic, key=lambda k: dic[k][2]))
print(sorted(dic, key=lambda k: dic[k][0], reverse=True))
|
其他嵌套排序
更深层嵌套排序方法和上面介绍的大同小异,实际就是lambda的操作;
需要注意的就是dict的排序只会取其key,所以需要lambda首先将其转换为value才能操作value排序。