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
61,5,3,4,2,7,6) tup1=(
sorted(tup1)
[1, 2, 3, 4, 5, 6, 7]
'a','d','f','b','e','c') tup2=(
sorted(tup2)
['a', 'b', 'c', 'd', 'e', 'f'] - 元组列表
1
2
3
4
5
6
7
8
9
10
11
12'a',1),('c',4),('e',0),('d',2),('f',3)] tuplist=[(
'john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),] student_tuples = [(
#直接对元组列表进行排序
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
7from 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)]