美文网首页
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