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

       

  • 相关阅读:
    JS实现对Date Range的认证
    SharePoint 用SafeControl的方式创建能够重复利用的Control
    设计模式详解(链接)
    Asp.net MVC3中进行自定义Error Page
    手动将自定制的WebPart部署到 SharePoint 2010 中
    获取 SharePoint 2010 中所有的User Profile Service Application
    自定义Data Service Providers — (5)最小化的运行时服务
    温总理对软件工作者的勉励
    自定义Data Service Providers —(9)关系
    自定义Data Service Providers — (7)交互式查询
  • 原文地址:https://www.cnblogs.com/JayeHe/p/7577886.html
Copyright © 2011-2022 走看看