zoukankan      html  css  js  c++  java
  • Python 之 sorted()排序详解 适用于任意可迭代对象比如列表,字典等

    详细解释一下函数sorted的具体用法:

    对字典:  

     1 >>> a = {3: '', 5: '', 8: '', 1: ''}
     2 >>> b = sorted(a) # 对字典默认是按key做了一个升序排列, 如下输出结果
     3 >>> print(b)
     4 [1, 3, 5, 8]    
     5 >>>
     6 >>> b = sorted(a, reverse=True) # reverse默认是False,True为降序排列
     7 >>> print(b) 
     8 [8, 5, 3, 1]
     9 >>> print(a)
    10 {3: '', 5: '', 8: '', 1: ''}

      对字典默认是按key做了一个升序排列 , 生成一个按key排序好的新列表 , reverse控制排列顺序, 默认是False为升序 , True为降序 . 不改变原来的对象. 如果需要以字典的value来排序的话 ,我们需要用到参数key , 也就是关键词,  看下面这句命令 , lambda是一个隐函数 ,  是固定写法 , 不要写成别的单词 ,  key: a[key] 这个key表示字典a的key , 临时取的名字, 可以任意更改, a[key]表示这个key在字典a的value

    1 >>> a = {'c++': 58, 'python': 69, 'linux': 100, 'go': 52}
    2 >>> b = sorted(a, key=lambda key: a[key], reverse=True)
    3 >>> print(b)
    4 ['linux', 'python', 'c++', 'go']

    对列表:

    1 >>> a = [5, 10, 56, 8, 4, 9]
    2 >>> b = sorted(a)
    3 >>> print(b)
    4 [4, 5, 8, 9, 10, 56]
    5 >>> print(a)
    6 [5, 10, 56, 8, 4, 9]

    直接使用sorted方法 , 返回一个列表b , b就是排序好了的 .

    假如a是一个由元组构成的列表 , 也需要用到参数key, 如下, 其中tp表示列表a中的一个元素(这里是一个元祖),临时取得名字, 可以任意更改, tp[1] 表示以元祖里第二个元素排列

    1 >>> a = [('c', 5), ('a', 10), ('f', 6), ('d', 7), ('e', 9), ('c', 4), ('f', 11)]
    2 >>> b = sorted(a, key=lambda tp: tp[1])
    3 >>> print(b)
    4 [('c', 4), ('c', 5), ('f', 6), ('d', 7), ('e', 9), ('a', 10), ('f', 11)]
    5 >>> print(a)
    6 [('c', 5), ('a', 10), ('f', 6), ('d', 7), ('e', 9), ('c', 4), ('f', 11)]
    7 >>>

    利用operator模块提供的itemgetter函数 , 来使排序更简单 , a 列表元素是一个三元组 , 现在需要按元祖的第三个元素来排列 , 如下

    1 >>> from operator import itemgetter
    2 >>> a = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
    3 >>> b = sorted(a, key=itemgetter(2))
    4 >>> print(b)
    5 [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
    6 >>>

    我们也可以进行多级排序,例如要根据第二个元素和第三个元素进行排序,可以这么写:

    1 >>>
    2 >>> b = sorted(a, key=itemgetter(1, 2))
    3 >>> print(b)
    4 [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
    5 >>>

       

  • 相关阅读:
    【原】error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::string'
    【原】开发路上疑难BUG调试记录
    【转】XCode: duplicate symbol 解决方案
    【原】就IOS发布app时如何保护文本资源的一个方法
    【原】xcode5.0升级5.1遇到的clang: error: unknown argument: '-fobj-arc'错误
    【转】生产者与消费者
    安卓快速排序与冒泡排序
    数据结构之算法时间复杂度
    常见数据结构与算法整理总结(上)
    Activity的onPause()、onStop()和onDestroy()里要做的事情
  • 原文地址:https://www.cnblogs.com/JayeHe/p/7577886.html
Copyright © 2011-2022 走看看