Python 排序总结

Python 排序总结

列表、字典、包含字典的列表、包含元组的列表排序

1、列表排序

两种方法

sorted (list): 返回一个对象,原来的 list 不变,生成一个新的排好的 list 对象;

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

排序实例:
L = [2, 4, 1, 5, 9]

1.1 升序

>>> sorted(L)
[1, 2, 4, 5, 9]

>>> L.sort()
>>> print L
[1, 2, 4, 5, 9]

1.2 降序

reverse 关键字:排序规则。 reverse = True 或者 reverse = False,有默认值,默认为升序排列(False)

>>> sorted(L,reverse=True)
[9, 5, 4, 2, 1]

>>> L.sort(reverse=True)
>>> print L
[9, 5, 4, 2, 1]

2、字典排序

字典的特点是无序,可以按照键(key)或者值(value)对其进行排序,但是返回的结果肯定不能是字典。

排序实例:

D = {'jack': 23, 'rose': 21, 'flank': 22}

2.1 升序

2.1.1 lambda 表达式

>>> sorted(D.items(), key=lambda d:d[1])  # 值(value)排序
[('rose', 21), ('flank', 22), ('jack', 23)]

>>> sorted(D.items(), key=lambda d:d[0]) # 按键(key)排序按
[('flank', 22), ('jack', 23), ('rose', 21)]
sorted(iterable[, cmp[, key[, reverse]]])

iterable:是可迭代类型类型;

cmp:用于比较的函数,比较什么由 key 决定,有默认值,迭代集合中的一项;

key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;

2.1.2 operator 模块

>>> import operator
>>> print sorted(D.items(), key=operator.itemgetter(1))   # 值(value)排序
[('rose', 21), ('jack', 23), ('flank', '23')]

>>> print sorted(D.items(), key=operator.itemgetter(0))   # 按键(key)排序按
[('flank', '23'), ('jack', 23), ('rose', 21)]

2.2 降序

2.2.1 lambda 表达式

和 list 一样,加入 reverse 参数即可

>>> sorted(D.items(), key=lambda d:d[0], reverse=True) # 按键(key)排序按
[('rose', 21), ('jack', 23), ('flank', 22)]

>>> sorted(D.items(), key=lambda d:d[1], reverse=True) # 值(value)排序
[('jack', 23), ('flank', 22), ('rose', 21)]

2.2.2 operator 模块

>>> import operator
>>> print sorted(D.items(), key=operator.itemgetter(0), reverse=True)   # 按键(key)排序按
[('rose', 21), ('jack', 23), ('flank', '23')]

>>> print sorted(D.items(), key=operator.itemgetter(1), reverse=True)   # 值(value)排序
[('flank', '23'), ('jack', 23), ('rose', 21)]

3、包含字典的列表排序

指定 list 中字典的某个键值进行排序

排序实例:
D = [{'name': 'jack', 'age': 23}, {'name': 'rose', 'age': 21}, {'name': 'flank','age': 22}]

3.1 升序

3.1.1 lambda 表达式

>>> import operator
>>> sorted(D, key=lambda x : x['age'])
[{'age': 21, 'name': 'rose'}, {'age': 22, 'name': 'flank'}, {'age': 23, 'name': 'jack'}]

3.1.2 operator 模块

>>> import operator
>>> sorted(D, key=operator.itemgetter('name'))   # 根据'name'排序
[{'age': 22, 'name': 'flank'}, {'age': 23, 'name': 'jack'}, {'age': 21, 'name': 'rose'}]

>>> sorted(D, key=operator.itemgetter('age'))   # 根据'age'排序
[{'age': 21, 'name': 'rose'}, {'age': 22, 'name': 'flank'}, {'age': 23, 'name': 'jack'}]

3.2 降序

一样,加入 reverse 参数即可

3.2.1 lambda 表达式

>>> import operator
>>> sorted(D, key=lambda x : x['age'], reverse=True)
[{'age': 23, 'name': 'jack'}, {'age': 22, 'name': 'flank'}, {'age': 21, 'name': 'rose'}]

3.2.2 operator 模块

>>> import operator
>>> sorted(D, key=operator.itemgetter('name'), reverse=True) # 根据'name'排序
[{'age': 21, 'name': 'rose'}, {'age': 23, 'name': 'jack'}, {'age': 22, 'name': 'flank'}]

>>> sorted(D, key=operator.itemgetter('age'), reverse=True)   # 根据'age'排序
[{'age': 23, 'name': 'jack'}, {'age': 22, 'name': 'flank'}, {'age': 21, 'name': 'rose'}]

4、包含元组的列表排序

对列表中的元组排
# 升序, 降序加reverse=True
L.sort(key=lambda x:x[0])         # 根据第1个值排序
L.sort(key=operator.itemgetter(0)) # 根据第1个值排序
[('a', 4), ('b', 1), ('c', 2)]

L.sort(key=lambda x:x[1])         # 根据第2个值排序
L.sort(key=operator.itemgetter(1)) # 根据第2个值排序
[('b', 1), ('c', 2), ('a', 4)]
posted @   三三得九86  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示