您的位置:首页 > 编程语言 > Python开发

python排序操作

2015-08-26 18:23 507 查看
# -*- coding: utf-8 -*-
l = [('a', 10, 30), ('c', 8, 20), ('b', 17, 15)]
m = [{1:5, 3:4}, {1:3, 6:3}, {1:1, 2:4, 5:6}, {1:9}]
k = [{1:5, 3:4}, {1:3, 6:3}, {1:1, 2:4, 5:6}, {1:9}]
j = [('a', 10, 30), ('c', 8, 20), ('b', 17, 15)]

def f1(a, b):
return a[1]-b[1]

def f2(a):
return len(a)

if __name__ == '__main__':
## 本地排序,不返回副本
l.sort(cmp=f1)
print l

m.sort(key=f2) # 返回副本,原始输入不变
print m

k.sort(cmp=None, key=f2, reverse=True)
print k

## 返回副本,原始输入不变
print sorted(j, key=lambda x:x[0])
print sorted(j, key=lambda x:x[1])
print sorted(j, key=lambda x:x[2])
print sorted(j, cmp=lambda x, y: cmp(x[0], y[0]))
print sorted(j, cmp=lambda x, y: cmp(x[1], y[1]))
print sorted(j, cmp=lambda x, y: cmp(x[2], y[2]))

## 用operator加快排序速度
from operator import itemgetter, attrgetter
print sorted(j, key=itemgetter(2))

## 用operator函数进行多级排序
print sorted(j, key=itemgetter(1, 2))

## 对字典排序,返回由tuple组成的list,不再是字典
d = {'data1':3, 'data2':1, 'data3':2, 'data4':4}
print sorted(d.iteritems(), key=itemgetter(1), reverse=True)


输出:

pydev debugger: starting (pid: 9052)

[('c', 8, 20), ('a', 10, 30), ('b', 17, 15)]

[{1: 9}, {1: 5, 3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}]

[{1: 1, 2: 4, 5: 6}, {1: 5, 3: 4}, {1: 3, 6: 3}, {1: 9}]

[('a', 10, 30), ('b', 17, 15), ('c', 8, 20)]

[('c', 8, 20), ('a', 10, 30), ('b', 17, 15)]

[('b', 17, 15), ('c', 8, 20), ('a', 10, 30)]

[('a', 10, 30), ('b', 17, 15), ('c', 8, 20)]

[('c', 8, 20), ('a', 10, 30), ('b', 17, 15)]

[('b', 17, 15), ('c', 8, 20), ('a', 10, 30)]

[('b', 17, 15), ('c', 8, 20), ('a', 10, 30)]

[('c', 8, 20), ('a', 10, 30), ('b', 17, 15)]

[('data4', 4), ('data1', 3), ('data3', 2), ('data2', 1)]

参考:http://blog.163.com/zhuandi_h/blog/static/1802702882012111284632184/?COLLCC=3141421676&COLLCC=3301807197&COLLCC=3141421676&COLLCC=3301807197&
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: