python 上各类数据的排序问题
本文通过比较对 Python 的 list、dict、tuple 应用 sort、sorted 函数的效果,并展示多关键字排序的使用
Python 内建排序函数
- list.sort () 对 list 成员进行排序,不返回副本
- sorted (list) 对 list 成员进行排序,返回副本
Python 排序列表 (list)?
- 按元素大小排序:如果 list 内的元素是字符 / 字符串,将依次按照该字符 / 字符串的 ASCCII 值进行排序,即默认优先将大写字母排前面,可通过参数_key=str. lower_控制其从小字母优先排
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 数值类型
>>> sorted([1,6,3,2,5,7,4])
[1, 2, 3, 4, 5, 6, 7]
#字符类型
>>> sorted(['a','d','e','b','f','c'])
['a', 'b', 'c', 'd', 'e', 'f']
# 字符串类型
>>> sorted(['a','ad','ada','ad1','abe','b','f','c'])
['a', 'abe', 'ad', 'ad1', 'ada', 'b', 'c', 'f']
#字符串中包含大小写
>>> sorted(['a','ad','ada','A','ad1','abe','Abe','b','f','c'])
['A', 'Abe', 'a', 'abe', 'ad', 'ad1', 'ada', 'b', 'c', 'f']
#小写字母优先
>>> sorted(['a','ad','ada','A','ad1','abe','Abe','b','f','c'],key=str.lower)
['a', 'A', 'abe', 'Abe', 'ad', 'ad1', 'ada', 'b', 'c', 'f'] - 按照元素属性排序
1
2
3# 按列表元素的长度进行排序
sorted(['a','ad','ada','A','ad1','abe','Abe','b','f','c'],key=lambda str:len(str))
['a', 'A', 'b', 'f', 'c', 'ad', 'ada', 'ad1', 'abe', 'Abe']
Python 排序字典 (dictory)?
1
2
3
4
5
6
7
8
9
10
11
12
13#对字典进行排序
>>> sorted({1: 'D', 5: 'B', 2: 'B', 4: 'E', 3: 'A'})
[1, 2, 3, 4, 5]
#按照字典中的values的大小进行排序
>>> dict
{1: 'DE', 2: 'DDDB', 3: 'A', 4: 'QPOIE', 5: 'WWB'}
>>> dict.items()
dict_items([(1, 'DE'), (2, 'DDDB'), (3, 'A'), (4, 'QPOIE'), (5, 'WWB')])
>>> sorted(dict.items(),key=lambda value:value[1])
[(3, 'A'), (2, 'DDDB'), (1, 'DE'), (4, 'QPOIE'), (5, 'WWB')]
#按照字典中的values的长度进行排序
>>> sorted(dict.items(),key=lambda value:len(value[1]))
[(3, 'A'), (1, 'DE'), (5, 'WWB'), (2, 'DDDB'), (4, 'QPOIE')]
Python 排序元组 (tuple)?
- 单元组
1
2
3
4
5
6>>> tup1=(1,5,3,4,2,7,6)
>>> sorted(tup1)
[1, 2, 3, 4, 5, 6, 7]
>>> tup2=('a','d','f','b','e','c')
>>> sorted(tup2)
['a', 'b', 'c', 'd', 'e', 'f'] - 元组列表
1
2
3
4
5
6
7
8
9
10
11
12>>> tuplist=[('a',1),('c',4),('e',0),('d',2),('f',3)]
>>> student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]
>>>
#直接对元组列表进行排序
>>> sorted(tuplist)
[('a', 1), ('c', 4), ('d', 2), ('e', 0), ('f', 3)]
#按照元组的第某个值进行排序
>>> sorted(tuplist,key=lambda tup:tup[1])
[('e', 0), ('a', 1), ('d', 2), ('f', 3), ('c', 4)]
#按照元组的第某个值进行排序
>>> sorted(student_tuples, key=lambda student: student[2])
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
Python 高级排序?
- 使用 Operator 模块
1
2
3
4
5
6
7>>> from operator import itemgetter, attrgetter
#一个排序关键字
>>> sorted(student_tuples, key=itemgetter(2))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
#两个排序关键字
>>> sorted(student_tuples, key=itemgetter(1,2))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]