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ự.

Hãy thử Giải pháp này trong Trình chỉnh sửa

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)
Đầu ra thiết bị đầu cuối
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à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.