python sorted排序:使用lambda应对各种复杂情况的排序,包括list嵌套dict

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python sorted排序:使用lambda应对各种复杂情况的排序,包括list嵌套dict相关的知识,希望对你有一定的参考价值。

参考技术A 原文链接
https://www.polarxiong.com/archives/Python-%E4%BD%BF%E7%94%A8lambda%E5%BA%94%E5%AF%B9%E5%90%84%E7%A7%8D%E5%A4%8D%E6%9D%82%E6%83%85%E5%86%B5%E7%9A%84%E6%8E%92%E5%BA%8F-%E5%8C%85%E6%8B%AClist%E5%B5%8C%E5%A5%97dict.html
一、需要用到的函数
需要用到的函数很少,基本上就是sorted()和lambda。

sorted()
sorted()函数原型:

Python
sorted(iterable[,key][,reverse])
可见sorted()可以接受3个参数,需要排序的变量必不可少,然后是key指定排序的元素,reverse指定是否逆序。

lambda
lambda实际上就是匿名函数

一般形式:

Python
lambda arguments: expression
写成函数形式就是

Python
def <lambda>(arguments):
return expression
当lambda和sorted()的key参数结合就有意想不到的效果了。

二、各种排序
1.简单list排序
Python
lis = ['a', 'b', 'c']
print(sorted(lis))

print(sorted(lis, reverse=True))

2.dict的key排序
Python
dic = 'c': 1, 'b': 2, 'a': 3
print(sorted(dic))

print(sorted(dic, reverse=True))

3.dict的value排序
Python
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))

4.list内嵌套list排序
Python
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))

5.dict内嵌套dict排序
Python
dic =
'a': 'x': 3, 'y': 2, 'z': 1,
'b': 'x': 2, 'y': 1, 'z': 3,
'c': 'x': 1, 'y': 3, 'z': 2,

print(sorted(dic, key=lambda k: dic[k]['x']))

print(sorted(dic, key=lambda k: dic[k]['y']))

print(sorted(dic, key=lambda k: dic[k]['z']))

print(sorted(dic, key=lambda k: dic[k]['x'], reverse=True))

6.list内嵌套dict排序
Python
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))

7.dict内嵌套list排序
Python
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排序。

python学习 -- operator.itemgetter(), list.sort/sorted 以及lambda函数

Python 中有非常方便高效的排序函数,下面主要介绍如何sort/sorted对list,dict进行排序。

1. 用list.sort /sorted 对list of tuples中第二个值进行排序

>>> 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进行排序

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

  

以上是关于python sorted排序:使用lambda应对各种复杂情况的排序,包括list嵌套dict的主要内容,如果未能解决你的问题,请参考以下文章

python3排序 sorted(key=lambda)

python sorted排序:使用lambda应对各种复杂情况的排序,包括list嵌套dict

在 Python 3 中使用 lambda 排序 [重复]

python学习 -- operator.itemgetter(), list.sort/sorted 以及lambda函数

python-list.sort && lambda

python java lambda表达式自定义排序