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