美文网首页效率
Python: sorted,operator.itemgett

Python: sorted,operator.itemgett

作者: NILSTARK | 来源:发表于2016-07-21 22:08 被阅读3796次

    [Python]对容器内数据的排序有两种,一种是容器自己的sort函数,一种是内建的sorted函数。
    sort函数和sorted函数唯一的不同是,sort是在容器内排序,sorted生成一个新的排好序的容器。

    对于一个简单的数组 L=[5,2,3,1,4].
    sort: L.sort()

    sorted(...)
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
    iterable:待排序的可迭代类型的容器;
    cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;
    key:用列表元素的某个已命名的属性或函数(只有一个参数并且返回一个用于排序的值)作为关键字,有默认值,迭代集合中的一项;
    reverse:排序规则. reverse = True 或者 reverse = False,有默认值。
    返回值:是一个经过排序的可迭代类型,与iterable一样。

    如果是一个多维的列表 L=[(‘b’,2),(‘a’,1),(‘c’,3),(‘d’,4)].
    有三种选择对这个多维列表进行排序
    利用cmp函数

    sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))
    L.sort(cmp=lambda x,y:cmp(x[1],y[1]))

    利用key

    sorted(L, key=lambda x:x[1]);
    L.sort(key=lambda x:x[1]);

    反序

    以上几种排序均可加上参数reverse.
    例如 sorted(reverse=True), L.sort(reverse=True). 或者改成False

    OrderedDict是collections中的一个包,能够记录字典元素插入的顺序,常常和排序函数一起使用来生成一个排序的字典。
    比如,比如一个无序的字典
    d = {‘banana’:3,’apple’:4,’pear’:1,’orange’:2}
    通过排序来生成一个有序的字典,有以下几种方式
    collections.OrderedDict(sorted(d.items(),key = lambda t:t[0]))
    或者
    collections.OrderedDict(sorted(d.items(),key = lambda t:t[1]))
    或者
    collections.OrderedDict(sorted(d.items(),key = lambda t:len(t[0])))

    operator.itemgetter函数
    operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子。

    a = [1,2,3] 
    b=operator.itemgetter(1)      //定义函数b,获取对象的第1个域的值> b(a) 
    2 
    b=operator.itemgetter(1,0)   //定义函数b,获取对象的第1个域和第0个的值
    b(a) 
    (2, 1) 
    

    要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。

    • 用 operator 函数进行多级排序
     students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),]  
    >>> sorted(students, key=itemgetter(1,2))  # sort by grade then by age  
    [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]  
    ## 对字典排序
    >>> d = {'data1':3, 'data2':1, 'data3':2, 'data4':4}  
    >>> sorted(d.iteritems(), key=itemgetter(1), reverse=True)  
    [('data4', 4), ('data1', 3), ('data3', 2), ('data2', 1)]  
    

    相关文章

      网友评论

        本文标题:Python: sorted,operator.itemgett

        本文链接:https://www.haomeiwen.com/subject/lsabjttx.html