pythonlist排序

实例1: >>>l = [2,3,1,4] >>>l.sort() >>>l >>>[1,2,3,4] 实例2: >>>l = [2,3,1,4] >>>l.sort(reverse=true) >>>l >>>[4,3,2,1] 实例3:对第二个关键字排序 >>>l = [(‘b’,6),(‘a’,1),(‘c’,3),(‘d’,4)] >>>l.sort(lambda x,y:cmp(x[1],y[1])) >>>l >>>[(‘a’, 1), (‘c’, 3), (‘d’, 4), (‘b’, 6)] 实例4: 对第二个关键字排序 >>>l = [(‘b’,6),(‘a’,1),(‘c’,3),(‘d’,4)] >>>l.sort(key=lambda x:x[1]) >>>l >>>[(‘a’, 1), (‘c’, 3), (‘d’, 4), (‘b’, 6)] 实例5: 对第二个关键字排序 >>>l = [(‘b’,2),(‘a’,1),(‘c’,3),(‘d’,4)] >>>import operator >>>l.sort(key=operator.itemgetter(1)) >>>l >>>[(‘a’, 1), (‘b’, 2), (‘c’, 3), (‘d’, 4)] 实例6:(dsu方法:decorate-sort-undercorate) >>>l = [(‘b’,2),(‘a’,1),(‘c’,3),(‘d’,4)] >>>a = [(x[1],i,x) for i,x in enumerate(l)] #i can confirm the stable sort >>>a.sort() >>>l = [s[2] for s in a] >>>l >>>[(‘a’, 1), (‘b’, 2), (‘c’, 3), (‘d’, 4)] 以上给出了6中对list排序的方法,其中实例3.4.5.6能起到对以list item中的某一项 为比较关键字进行排序. 效率比较: cmp < dsu < key 通过实验比较,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相当 多关键字比较排序: 实例7: >>>l = [(‘d’,2),(‘a’,4),(‘b’,3),(‘c’,2)] >>> l.sort(key=lambda x:x[1]) >>> l >>>[(‘d’, 2), (‘c’, 2), (‘b’, 3), (‘a’, 4)] 我们看到,此时排序过的l是仅仅按照第二个关键字来排的, 如果我们想用第二个关键字排过序后再用第一个关键字进行排序呢?有两种方法 实例8: >>> l = [(‘d’,2),(‘a’,4),(‘b’,3),(‘c’,2)] >>> l.sort(key=lambda x:(x[1],x[0])) >>> l >>>[(‘c’, 2), (‘d’, 2), (‘b’, 3), (‘a’, 4)] 实例9: >>> l = [(‘d’,2),(‘a’,4),(‘b’,3),(‘c’,2)] >>> l.sort(key=operator.itemgetter(1,0)) >>> l >>>[(‘c’, 2), (‘d’, 2), (‘b’, 3), (‘a’, 4)] 对于简单的list排序,直接调用内建函数就可以了,但是对于dict的list排序就没有那么直接了,不过,还是有很简洁的办法的,如: >>> ls1 = [{‘a’ : 1, ‘b’ : 12}, {‘a’ : -1, ‘b’ : 22},{‘a’ : 12, ‘b’ : 32},{‘a’ : 6, ‘b’ : 42}] >>> ls1.sort(key=lambda obj:obj.get(‘a’)) >>> ls1 [{‘a’: -1, ‘b’: 22}, {‘a’: 1, ‘b’: 12}, {‘a’: 6, ‘b’: 42}, {‘a’: 12, ‘b’: 32}] >>> python中dict和list排序 1、list排序 列表的排序是python内置功能,自身含有sort方法 如: >>> s=[2,1,3,0] >>> s.sort() [0, 1, 2, 3] 2、dict排序 对字典的排序,因为每一个项包括一个键值对,所以要选择可比较的键或值进行排序 sorted(iterable[, cmp[, key[, reverse]]] cmp和key一般使用lambda 如: >>> d={“ok”:1,”no”:2} 对字典按键排序,用元组列表的形式返回 >>> sorted(d.items, key=lambda d:d[0]) [(‘no’, 2), (‘ok’, 1)] 对字典按值排序,用元组列表的形式返回 >>> sorted(d.items, key=lambda d:d[1]) [(‘ok’, 1), (‘no’, 2)] 3、元组列表排序 如 >>> li=[(2,’a’),(4,’b’),(1,’d’)] >>> li.sort() [(1, ‘d’), (2, ‘a’), (4, ‘b’)] 如果字典按项的第一个元素排序的话,可以转换成元组列表来进行 >>> d={“ok”:1,”no”:2} >>> tt=[tuple(item) for item in d.items()] >>> tt.sort() [(‘no’, 2), (‘ok’, 1)] 4 其他人的实现,留住备忘 下面是一个结构的例子 >>> class test: def __init__(self,a,b): self.a = a self.b = b >>> test1 = test(5,25) >>> test2 = test(10,15) >>> tests = [test1,test2] >>> sorted(tests,cmp = lambda x,y: cmp(x.a, y.a))  >>> result = sorted(tests,key = lambda d:d.a) 5、 # (imho) the simplest approach: def sorteddictvalues1(adict): items = adict.items() items.sort() return [value for key, value in items] # an alternative implementation, which # happens to run a bit faster for large # dictionaries on my machine: def sorteddictvalues2(adict): keys = adict.keys() keys.sort() return [dict[key] for key in keys] # a further slight speed-up on my box # is to map a bound-method: def sorteddictvalues3(adict): keys = adict.keys() keys.sort() return map(adict.get, keys)

Posted in 未分类

发表评论