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 表示按降序排列,默认按升序排列

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

原文地址:https://www.cnblogs.com/codeBang/p/11192112.html