Sử dụng operator.itemgetter thay lambda để sắp xếp list dictionary, nhanh hơn một chút và dễ đọc.
Ví dụ
from operator import itemgetter
data = [
{"name": "Will", "age": 56},
{"name": "Rob", "age": 20},
{"name": "Mark", "age": 34},
{"name": "John", "age": 24}
]
print("Theo age:")
print(sorted(data, key=itemgetter('age')))
print("\nTheo age, name:")
print(sorted(data, key=itemgetter('age', 'name')))
print("\nTheo age giảm:")
print(sorted(data, key=itemgetter('age'), reverse=True))
Kết quả
Theo age:
[{'name': 'Rob', 'age': 20}, {'name': 'John', 'age': 24}, {'name': 'Mark', 'age': 34}, {'name': 'Will', 'age': 56}]
Theo age, name:
[{'name': 'Rob', 'age': 20}, {'name': 'John', 'age': 24}, {'name': 'Mark', 'age': 34}, {'name': 'Will', 'age': 56}]
Theo age giảm:
[{'name': 'Will', 'age': 56}, {'name': 'Mark', 'age': 34}, {'name': 'John', 'age': 24}, {'name': 'Rob', 'age': 20}]
Giải thích
itemgetter('age')trả về callable lấy trường 'age' từ dict.itemgetter('age', 'name')trả về tuple (age, name) để so sánh đa cấp.- Hiệu năng tốt hơn lambda nhẹ, code rõ ràng hơn.
- Phù hợp cho sắp xếp phức tạp, nhiều trường.