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 表示按降序排列,默认按升序排列
本文介绍了按字典的值排序的两种方法,第二种从空间复杂度和时间复杂度上更优
欢迎关注公众号