Python 排序总结

Python 排序总结1、列表排序1.1 升序1.2 降序2、字典排序2.1 升序2.1.1 lambda 表达式2.1.2 operator 模块2.2 降序2.2.1 lambda 表达式2.2.2 operator 模块3、包含字典的列表排序3.1 升序3.1.1 lambda 表达式3.1.2 operator 模块3.2 降序3.2.1 lambda 表达式3.2.2 operator 模块4、包含元组的列表排序

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

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