Python排序,针对列表,字典

来源:互联网 发布:unity5.5.1f1 for mac 编辑:程序博客网 时间:2024/05/16 15:22

      Python的内部容器,大概分为:tuple,set,list,dict,就排序来说,对列表和字典的排序需求较多,tuple主要作为不可变容器,set用来去重复,下面把list和dict常见排序方法总结一下:

     一、列表

           1、 list排序很简单,主要看list的元素组成,如果元素是由单值组成,比如下面的方法:

>>> a = [1,2,5,3,4]>>> a.sort()>>> print a[1, 2, 3, 4, 5]

list本身自带sort()方法,这种方法是在list本身进行操作,也就是说改变了a的原始结构

            2、list元素是由元组组成的,要求按照元组的某一列进行排序,示例如下:

>>> a=[('c',1),('b',2),('a',3)]>>> b=sorted(a,key = lambda ss:ss[0])>>> b[('a', 3), ('b', 2), ('c', 1)]>>> a[('c', 1), ('b', 2), ('a', 3)]>>> 
采用Python的内建函数sorted(),这种很明显是把排序结果放到了b列表中,但是实际上并不会改变a数据的原始结构,如果我们依然采用列表的sort()方法呢?示例如下:

>>> a[('c', 1), ('b', 2), ('a', 3)]>>> a.sort(key = lambda x:x[0])>>> a[('a', 3), ('b', 2), ('c', 1)]>>> 
 还有一个方法不过使用cmp参数:

>>> c=sorted(a,cmp = lambda x,y:cmp(x[1],y[1]),reverse = 0)>>> c[('c', 1), ('b', 2), ('a', 3)]>>> 

cmp是比较,X[1],y[1]表示第一和第二个元素的第二列,reverse=0表示不进行反转,可以reverse=False,两者一样效果,当然reverse不写也可以,默认为False

             3、使用operator模块

>>> a[('c', 1), ('b', 2), ('a', 3)]>>> b = sorted(a,key=itemgetter(0))>>> b[('a', 3), ('b', 2), ('c', 1)]

二、字典排序

      字典的话,主要是按照键或值来排序

>>> b[('a', 3), ('b', 2), ('c', 1)]>>> dic = {'a':3,'b':2,'c':1}>>> sorted(dic.iteritems(),key = lambda aa:aa[1],reverse=False)[('c', 1), ('b', 2), ('a', 3)]>>> 
      还有的方法是直接用for循环来做,但我觉得直接sorted()已经很清晰了。

总结:

      一般做排序,list来说可以根据是否要改变原始数据结构来选择不同的方法,字典就用sorted即可,关于效率,其实我个人感觉用lambda的key方法较快。



0 0
原创粉丝点击