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

 

   

 

posted on 2017-09-22 23:51  JayeHe  阅读(796)  评论(0编辑  收藏  举报

导航