Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách sắp xếp list of dictionaries theo value trong Python


Sắp xếp list chứa dict theo giá trị của một key cụ thể. Dùng sorted() với key parameter.

Dữ liệu mẫu

employees = [
    {"name": "John", "salary": 10000},
    {"name": "Emma", "salary": 30000},
    {"name": "Harry", "salary": 15000},
    {"name": "Aslan", "salary": 10000}
]

Cách 1: Lambda function (Phổ biến)

# Tăng dần theo salary
sorted_emp = sorted(employees, key=lambda item: item['salary'])
print(sorted_emp)

# Giảm dần
sorted_desc = sorted(employees, key=lambda item: item['salary'], reverse=True)
print(sorted_desc)

Kết quả

[{'name': 'John', 'salary': 10000}, {'name': 'Aslan', 'salary': 10000}, {'name': 'Harry', 'salary': 15000}, {'name': 'Emma', 'salary': 30000}]
[{'name': 'Emma', 'salary': 30000}, {'name': 'Harry', 'salary': 15000}, {'name': 'John', 'salary': 10000}, {'name': 'Aslan', 'salary': 10000}]

Cách 2: operator.itemgetter (Nhanh hơn lambda)

from operator import itemgetter

sorted_emp = sorted(employees, key=itemgetter('salary'))
# itemgetter('salary') ≈ lambda x: x['salary'] nhưng tối ưu C-level

Cách 3: Sắp xếp đa tiêu chí (Multi-key)

# Sắp xếp: salary tăng, nếu bằng thì name tăng
sorted_multi = sorted(employees, key=lambda x: (x['salary'], x['name']))
print(sorted_multi)

# Hoặc dùng itemgetter đa key
from operator import itemgetter
sorted_multi2 = sorted(employees, key=itemgetter('salary', 'name'))

So sánh hiệu năng

Phương phápTốc độĐộ đọcLinh hoạt
lambdaTrung bìnhTốtCao (logic tùy ý)
itemgetterNhanh hơn (C-level)TốtChỉ get item
tuple key (lambda)Trung bìnhTốtMulti-key dễ dàng

Kết luận

Dùng sorted(list, key=lambda x: x['key']) cho đơn giản. itemgetter cho hiệu năng. Tuple key cho multi-criteria sort.