十四、Python的自定义排序 以及两种排序方式

data_list = []
data_list.append({'softname':'1','version':'1.2.2.2'})
data_list.append({'softname':'7','version':'1.2.2.2'})
data_list.append({'softname':'5','version':'1.2.2.2'})
data_list.append({'softname':'2','version':'1.2.2.2'})
data_list.append({'softname':'3','version':'1.2.2.2'})
data_list.append({'softname':'9','version':'1.2.2.2'})
#升序
data_list.sort(key=lambda obj:obj.get('softname'), reverse=False)

print data_list
#[{'softname': '1'}, {'softname': '2'}, {'softname': '3'}, {'softname': '5'}, {'softname': '7'}, {'softname': '9'}]
#降序
data_list.sort(key=lambda obj:obj.get('softname'), reverse=True)
print data_list
#[{'softname': '9'}, {'softname': '7'}, {'softname': '5'}, {'softname': '3'}, {'softname': '2'}, {'softname': '1’}]

对List进行排序,Python提供了两个方法

方法1.用List的内建函数list.sort进行排序

list.sort(func=None, key=None, reverse=False)

Python实例:

1

2

3

4

5

6

>>> list = [2,5,8,9,3]

>>> list

[2,5,8,9,3]

>>> list.sort()

>>> list

[2, 3, 5, 8, 9]

方法2.用序列类型函数sorted(list)进行排序(从2.4开始)

Python实例:

1

2

3

4

5

>>> list = [2,5,8,9,3]

>>> list

[2,5,8,9,3]

>>> sorted(list)

[2, 3, 5, 8, 9]

两种方法的区分:

sorted(list)返回1个对象,可以用作表达式。原来的list不变,生成1个新的排好序的list对象。

list.sort() 不会返回对象,改变原本的list。

其他sort的实例:

实例1:正向排序

1

2

3

4

>>>L = [2,3,1,4]

>>>L.sort()

>>>L

>>>[1,2,3,4]

实例2:反向排序

1

2

3

4

>>>L = [2,3,1,4]

>>>L.sort(reverse=True)

>>>L

>>>[4,3,2,1]

实例3:对第2个关键字排序

1

2

3

4

>>>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: 对第2个关键字排序

1

2

3

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: 对第2个关键字排序

1

2

3

4

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)

1

2

3

4

5

6

>>>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中的某1项

为比较关键字进行排序.

效力比较:

cmp < DSU < key

通过实验比较,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相当

多关键字比较排序:

实例7:

1

2

3

4

>>>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是仅仅依照第2个关键字来排的,

如果我们想用第2个关键字排过序后再用第1个关键字进行排序呢?有两种方法

实例8:

1

2

3

4

>>> 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:

1

2

3

4

>>> 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)]

为何实例8能够工作呢?缘由在于tuple是的比较从左到右比较的,比较完第1个,如果相等,比较第2个

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 十四、Python的自定义排序 以及两种排序方式

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡