zoukankan      html  css  js  c++  java
  • python进阶--字典排序

    • zip()函数
    • sorted()

    要求对字典中,按值的大小排序

    解决方案:
    利用zip函数

    zip函数介绍:
    zip函数可以将可迭代对象打包成一个个元组,在python3中返回一个对象,在python2中返回一个列表

    常用操作方法

    In [1]: a = [1,2,3]                                                                                                                
    
    In [2]: b = [2, 4, 6]                                                                                                              
    
    In [3]: zip(a, b)                                                                                                                  
    Out[3]: <zip at 0x109d1dc08>
    
    In [4]: list(zip(a, b))                                                                                                            
    Out[4]: [(1, 2), (2, 4), (3, 6)]
    
    In [5]: zip(*zip(a,b))                                                                                                             
    Out[5]: <zip at 0x109d7a148>
    
    In [6]: list(zip(*zip(a,b)))                    
    Out[6]: [(1, 2, 3), (2, 4, 6)]
    
    

    利用zip可以将列表压缩成元组列表的特性,将字典的key和value压成一个元组,然后按照元组的方式进行比较,从而达到排序的目的。
    代码如下

    # 生成一个字典
    data = {x: randint(60, 100) for x in 'abcxyz'}
    print(sorted(zip(data.values(), data.keys())))
    
    输出:[(69, 'c'), (75, 'a'), (76, 'x'), (81, 'z'), (94, 'y'), (95, 'b')]
    
    直接利用sorted排序

    sorted()方法,常用来对list进行直接排序
    例如

    In [7]: sorted([1, 5, 2, 9])                                                                                                       
    Out[7]: [1, 2, 5, 9]
    
    

    对字典排序,利用sorted()函数的key参数

    In [12]: data.items()                                                                                              
    Out[12]: dict_items([('a', 76), ('b', 83), ('c', 77), ('x', 72), ('y', 61), ('z', 81)])
    
    
    In [13]: sorted(data.items(), key=lambda x: x[1], reverse=True)                                                                    
    Out[13]: [('b', 83), ('z', 81), ('c', 77), ('a', 76), ('x', 72), ('y', 61)]
    
    

    每次迭代data.items(),将data.items()中的一个元素赋于key,然后排序,此处x就是data.items()的一个元素,x[1]为该元组的第一个值,赋于key,按key排序,

    reverse=True 表示按降序排列,默认按升序排列

    本文介绍了按字典的值排序的两种方法,第二种从空间复杂度和时间复杂度上更优

  • 相关阅读:
    HDU 4681 STRING dp+暴力。
    HDU 4669 Mutiples on a circle 不知道该归为哪一类。
    poj 3411 Paid Roads很水的DFS
    poj 1724 ROADS 很水的dfs
    STL学习笔记(转,还是比较全的)
    4666 Hyperspace stl
    poj3308 Paratroopers 最大流 最小点权覆盖
    poj 3114 Countries in War
    2013 Multi-University Training Contest 4 部分解题报告
    2013 Multi-University Training Contest 3 部分解题报告
  • 原文地址:https://www.cnblogs.com/codeBang/p/11192112.html
Copyright © 2011-2022 走看看