首页 > 代码库 > sorted()

sorted()

一、sorted() 简单用法

sorted() 用于对序列进行排序,但是注意是产生一个新的序列,原来的序列的值不会被改变,比如定义 list = [3, 1, 4, 2, 5] ,执行 sorted(list) 之后返回结果为 [1, 2, 3, 4, 5] ,但是 list 的值仍然是 [3, 1, 4, 2, 5]

二、sorted() 复杂用法

语法:sorted(iterable, cmp=None, key=None, reverse=False)

(1) iterable:可迭代的参数,可以通过for循环去遍历的都叫可迭代
(2) cmp:用于比较的函数,比较什么由key决定,如果不写默认值为None
(3) 
key:指定根据字典的key还是value来排序,如果要使用这个参数需要用到operator模块,operator.itemgetter(0)表示根据key来排序,operator.itemgetter(1)表示根据value来排序
(4) reverse:如果是reverse = True则倒序排序,如果是reverse= False则正序排序。默认是False

In [4]: x = {1:a, 2:b, 3:c, 4:d, 5:10, 9:3, 6:3}        //先定义一个字典,我们用这个字典来练习怎么排序In [5]: import operator          //插入operator模块In [6]: y = sorted(x.iteritems(), key=operator.itemgetter(0))        //第一个参数x.iteritems()先迭代然后交给后面的operator.itemgetter(0)来排序,0表示根据key来排序,1表示根据value来排序。至于为什么要迭代,用法跟print与return的区别一样,如果没有迭代,那么返回的只是一个生成器对象。In [7]: y        //查看排序后的值Out[7]: [(1, a), (2, b), (3, c), (4, d), (5, 10), (6, 3), (9, 3)]In [10]: y = sorted(x.iteritems(), key=operator.itemgetter(0), reverse=True)        //如果加上reverse=True表示倒序排序In [11]: yOut[11]: [(9, 3), (6, 3), (5, 10), (4, d), (3, c), (2, b), (1, a)]

 

练习题:找出占用空间大的文件或目录

思路:先对目录做遍历然后组成一个字典,把文件名作为key,把文件大小作为value,然后用sorted倒序排序

#!/usr/bin/env pythonimport sysimport osimport operatordef get_dic(topdir):                            //先对目录做遍历然后组成一个字典,把文件名作为key,把文件大小作为value    dic = {}    a = os.walk(topdir)    for p, d, f in a:        for i in f:            fn = os.path.join(p, i)            f_size = os.path.getsize(fn)            dic[fn] = f_size    return dicif __name__ == __main__:                    //用sorted()倒序排序然后打印出文件大小最大的前10个    dic = get_dic(sys.argv[1])    sorted_dic = sorted(dic.iteritems(), key=operator.itemgetter(1), reverse=True)    for k, v in sorted_dic[:10]:        print k, -->, v

 

 

 

 

    

sorted()