[置顶] Python排序,针对列表,字典

      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方法较快。



你可能感兴趣的:(排序,python,列表,字典)