美文网首页
sorted() 和 lambda --> 应用:字典排序

sorted() 和 lambda --> 应用:字典排序

作者: battleMonkey | 来源:发表于2019-03-27 01:02 被阅读0次

转载自作者:dalalaa
链接:https://www.jianshu.com/p/c53b2b522001
来源:简书

写在前面:

1. lambda 匿名函数

func = lambda x: x + 1

# 等同于:
def func(x)
    return  x + 1

#  冒号左边  相当于  <形参>
#  冒号右边  相当于  return的<返回值>

注意, 既然我们称 lambda 为匿名函数, 所以官方并 不建议 用 func 去接收, 而是 直接使用


2. 关于 sorted

sorted()函数不会改变数组本身

>>> a = [1,6,5,3,6,8,99,0]
>>> sorted(a)
[0, 1, 3, 5, 6, 6, 8, 99]
>>> a
[1, 6, 5, 3, 6, 8, 99, 0]

而 list.sort()会对list进行修改:

>>> a = [1, 6, 5, 3, 6, 8, 99, 0]
>>> a.sort()
>>> a
[0, 1, 3, 5, 6, 6, 8, 99]

list.sort()函数只适用于数组,而sorted()还能用于其他数据结构:

>>> b = {1:'a',3:'b',7:'d',4:'4',2:'4'}
>>> sorted(b)
[1, 2, 3, 4, 7]
>>> b
{1: 'a', 2: '4', 3: 'b', 4: '4', 7: 'd'}
>>> b.sort()
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
b.sort()
AttributeError: 'dict' object has no attribute 'sort'

3. 举个栗子:

下面用三个元组, 组成列表 通过 使用key参数, 传入lambda匿名函数 决定按哪个参数排序。

>>> a = [
(1,2,3),
(3,4,2),
(2,1,7),
]
  1. 以 元组 的 第二个 元素 排序:
>>> sorted(a, key = lambda x: x[1])
[(2, 1, 7), (1, 2, 3), (3, 4, 2)]
  1. 以 元组 的 第三个 元素 排序:
>>> sorted(a, key = lambda x: x[2])
[(3, 4, 2), (1, 2, 3), (2, 1, 7)]
  1. 以 元组 的 第一个 元素 排序:
>>> sorted(a)
[(1, 2, 3), (2, 1, 7), (3, 4, 2)]
  • sorted 负责对 列表a 进行 迭代, 循环遍历每一个 对象, 这里就是 遍历这三个元组
  • a 就是那个列表
  • x 指代 元组里的 每一个对象, 即 每一个元组
  • x[1] 指代 元组的 第二个元素

4. 字典排序

>>> b = {1:'a', 3:'b', 7:'d', 4:'c', 2:'k'}
  • 直接用key排序
>>> sorted(b)
[1, 2, 3, 4, 7]
  • 下方代码流程:
  1. sorted(b.items()... -----> 遍历 b.items()一个元组列表[(key,value)…]
  2. lambda a:a[1]-------------> 把每一个 遍历的对象 赋值给 a, 返回值 a[1]即每个字典对象的value值
  3. key = ...------------------> 接收 lambda 的返回值 a[0]
    剩下的 交给天意吧...
>>> sorted(b.items(), key = lambda a:a[1])              # a[1] 即 字典的value
[(1, 'a'), (3, 'b'), (4, 'c'), (7, 'd'), (2, 'k')]

相关文章

网友评论

      本文标题:sorted() 和 lambda --> 应用:字典排序

      本文链接:https://www.haomeiwen.com/subject/ngnovqtx.html