通过关键字排序一个字典列表

通过关键字排序一个字典列表

解决方案

通过使用operator模块的itemgetter函数

code

itemgetter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from operator import itemgetter


stu_dict = [
{'name': "张三", 'id': 1, 'age': 18},
{'name': "李四", 'id': 3, 'age': 9},
{'name': "王五", 'id': 2, 'age': 23},
{'name': "丁六", 'id': 4, 'age': 31},
{'name': "赵七", 'id': 5, 'age': 19},
]

print('---------使用itemgetter---------')
sorted_by_id = sorted(stu_dict, key=itemgetter('id'))
sorted_by_age = sorted(stu_dict, key=itemgetter('age'))
print(sorted_by_id)
print(sorted_by_age)

执行结果:

1
2
3
4
C:\Users\liuqi\AppData\Local\Programs\Python\Python37\python.exe F:/python/CODE/Python_cookbook.py
---------使用itemgetter---------
[{'name': '张三', 'id': 1, 'age': 18}, {'name': '王五', 'id': 2, 'age': 23}, {'name': '李四', 'id': 3, 'age': 9}, {'name': '丁六', 'id': 4, 'age': 31}, {'name': '赵七', 'id': 5, 'age': 19}]
[{'name': '李四', 'id': 3, 'age': 9}, {'name': '张三', 'id': 1, 'age': 18}, {'name': '赵七', 'id': 5, 'age': 19}, {'name': '王五', 'id': 2, 'age': 23}, {'name': '丁六', 'id': 4, 'age': 31}]

lambda

1
2
3
4
5
print('---------使用lambda----------')
sorted_by_id_lambda = sorted(stu_dict, key=lambda x: x['id'])
sorted_by_age_lambda = sorted(stu_dict, key=lambda x: x['age'])
print(sorted_by_id_lambda)
print(sorted_by_age_lambda)

执行结果:

1
2
3
---------使用lambda----------
[{'name': '张三', 'id': 1, 'age': 18}, {'name': '王五', 'id': 2, 'age': 23}, {'name': '李四', 'id': 3, 'age': 9}, {'name': '丁六', 'id': 4, 'age': 31}, {'name': '赵七', 'id': 5, 'age': 19}]
[{'name': '李四', 'id': 3, 'age': 9}, {'name': '张三', 'id': 1, 'age': 18}, {'name': '赵七', 'id': 5, 'age': 19}, {'name': '王五', 'id': 2, 'age': 23}, {'name': '丁六', 'id': 4, 'age': 31}]

注:本文使用的实例代码,参考自《python cookbook 第三版》