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