Cách sắp xếp từ điển theo giá trị trong Python
Tìm hiểu cách sắp xếp từ điển Python theo các giá trị của nó. Khám phá cách sắp xếp bằng cách sử dụng sắp xếp(), lambda khóa tùy chỉnh và xây dựng cấu trúc chính tả theo thứ tự.
Tổng quan
Mặc dù từ điển được xây dựng chủ yếu cho các thao tác tra cứu nhanh bằng cách sử dụng các khóa duy nhất, nhưng bạn thường sẽ cần sắp xếp các mục trong từ điển dựa trên giá trị của chúng. Ví dụ: sắp xếp học sinh theo điểm thi, liệt kê các sản phẩm từ rẻ nhất đến đắt nhất hoặc sắp xếp số từ theo tần suất.
Trong Python, bạn không thể sắp xếp trực tiếp từ điển tại chỗ vì cấu trúc từ điển tiêu chuẩn không hỗ trợ các phương thức sắp xếp thứ tự như danh sách. Thay vào đó, cách tiếp cận tiêu chuẩn là truy xuất các mục của từ điển dưới dạng bộ dữ liệu bằng cách sử dụng phương thức `.items()`, sắp xếp các bộ dữ liệu đó bằng hàm `sorted()` tích hợp với khóa sắp xếp tùy chỉnh, sau đó xây dựng lại từ điển từ các mục đã được sắp xếp.
Khóa sắp xếp thường là hàm lambda trả về phần tử thứ hai của bộ dữ liệu (giá trị từ điển): `key=lambda item: item[1]`. Kể từPython 3.7+, từ điển tiêu chuẩn giữ nguyên thứ tự chèn. Việc truyền lại danh sách các bộ dữ liệu đã được sắp xếp trở lại một từ điển bằng cách sử dụng hàm tạo `dict()` sẽ trả về một từ điển sạch, được sắp xếp sẵn sàng để lặp lại.
Đầu ra mã & thực thi
Tập lệnh này minh họa cách sắp xếp từ điển điểm kiểm tra theo các giá trị theo thứ tự tăng dần và giảm dần bằng cách sử dụng hàm lambda.
scores = {"Alice": 88, "Bob": 75, "Charlie": 95, "David": 82}
print("Original dictionary:", scores)
# 1. Sort by values (ascending order)
sorted_ascending = dict(sorted(scores.items(), key=lambda item: item[1]))
print("Sorted ascending:", sorted_ascending)
# 2. Sort by values (descending order)
sorted_descending = dict(sorted(scores.items(), key=lambda item: item[1], reverse=True))
print("Sorted descending:", sorted_descending)
# 3. sorting by keys for comparison
sorted_keys = dict(sorted(scores.items(), key=lambda item: item[0]))
print("Sorted by keys:", sorted_keys)Original dictionary: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}
Sorted ascending: {'Bob': 75, 'David': 82, 'Alice': 88, 'Charlie': 95}
Sorted descending: {'Charlie': 95, 'Alice': 88, 'David': 82, 'Bob': 75}
Sorted by keys: {'Alice': 88, 'Bob': 75, 'Charlie': 95, 'David': 82}Triển khai từng bước
- Gọi my_dict.items() để truy xuất các cặp khóa-giá trị dưới dạng danh sách các bộ dữ liệu.
- Chuyển các mục từ điển vào hàm sắp xếp().
- Chỉ định key=lambda item: item[1] để hướng dẫn hàm được sắp xếp() sắp xếp dựa trên giá trị (phần tử thứ hai của mỗi bộ dữ liệu).
- Truyền Reverse=True làm đối số tùy chọn để sắp xếp các mục theo thứ tự giảm dần.
- Xây dựng lại từ điển đã sắp xếp bằng cách chuyển danh sách các bộ dữ liệu đã sắp xếp tới hàm tạo dict().
Câu hỏi thường gặp
Key=lambda item: item[1] nghĩa là gì?
Hàm được sắp xếp () chuyển từng phần tử của chuỗi mục (một bộ (khóa, giá trị)) sang hàm lambda. item[1] trích xuất thành phần giá trị, yêu cầu Python sắp xếp các bộ dữ liệu theo giá trị.
Việc sắp xếp từ điển có ảnh hưởng đến tốc độ tra cứu chính của nó không?
Không, việc tra cứu khóa vẫn có độ phức tạp về thời gian trung bình là O(1) vì việc sắp xếp chỉ thay đổi trình tự lặp chứ không thay đổi cấu trúc bảng băm cơ bản.
Chủ đề liên quan
Tìm hiểu cách sắp xếp danh sách trong Python bằng phương thức Sort() và hàm Sort(). Khám phá các ví dụ về sắp xếp khóa tùy chỉnh và thứ tự đảo ngược.
Cách lặp qua từ điển trong PythonTìm hiểu cách lặp hoặc lặp qua từ điển Python. Khám phá các phương pháp lặp qua các khóa, giá trị và cặp khóa-giá trị bằng các ví dụ rõ ràng, có thể chạy được.
Tài nguyên Python được đề xuất
Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.
Vòng lặp Python
Tìm hiểu cách sử dụng vòng lặp Python để lặp lại dữ liệu. Nắm vững các phương pháp hay nhất về vòng lặp for, while, ngắt, tiếp tục và lặp bằng các ví dụ tương tác.
Bảng cheat phương pháp từ điển Python
Tìm hiểu các phương pháp từ điển Python. Hướng dẫn tham khảo đầy đủ về việc chèn, truy xuất, cập nhật và kiểm tra cặp khóa-giá trị.
Python vs Ruby: Kịch bản, Khung web và Triết học
So sánh Python và Ruby. Tìm hiểu sự khác biệt tinh tế trong triết lý, tính tinh tế của cú pháp, khung web (Djangoso với Rails) và kiểu thực thi.