Chuyển đến nội dung chính

Cách sắp xếp dictionary theo giá trị trong Python

Tìm hiểu các phương pháp hiệu quả để sắp xếp dictionary theo giá trị trong Python. Khám phá sắp xếp tăng dần và giảm dần cùng mẹo bổ sung để sắp xếp theo khóa.
· 5 phút đọc

Khám phá cùng AI

Sắp xếp là một thao tác nền tảng trong xử lý dữ liệu, và dictionary trong Python cũng không ngoại lệ. Dù chúng ta đang làm việc với một dự án phân tích dữ liệu phức tạp hay một script đơn giản, hiểu cách sắp xếp dictionary theo giá trị một cách hiệu quả sẽ cực kỳ hữu ích.

Trong bài viết này, chúng ta sẽ phân tích các phương pháp sắp xếp dictionary theo giá trị trong Python, giúp bạn có đủ công cụ để tổ chức dữ liệu theo nhu cầu.

Câu trả lời nhanh: Cách sắp xếp dictionary theo giá trị trong Python

Để nhanh chóng sắp xếp dictionary theo giá trị, chúng ta có thể dùng hàm tích hợp sẵn .sorted() của Python kết hợp với hàm lambda. Phương pháp này đơn giản và hiệu quả cho hầu hết các trường hợp.

student_scores = {
    'Alex': 88,
    'Ben': 75,
    'Cyrus': 93,
    'Denver': 85
}
sorted_by_values = dict(sorted(student_scores.items(), key=lambda item: item[1]))

print(sorted_by_values)

# Expected output:
# {'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}

Giờ hãy lùi lại một bước để hiểu về dictionary trong Python và vì sao đôi khi chúng ta cần sắp xếp chúng.

Dictionary trong Python là gì?

Các dictionary trong Python là một cấu trúc dữ liệu lưu trữ dữ liệu dưới dạng cặp khóa–giá trị. Chúng rất linh hoạt và cho phép tra cứu, chèn và xóa nhanh. Dưới đây là một ví dụ đơn giản:

student_scores = {
    'Alex': 88,
    'Ben': 75,
    'Cyrus': 93,
    'Denver': 85
}

# No expected output

Trong dictionary trên, tên học viên là khóa, và điểm của họ là giá trị. 

Dictionary hữu ích trong nhiều tình huống, chẳng hạn khi cần lưu trữ và truy xuất dữ liệu hiệu quả. Tuy nhiên, đôi lúc cần sắp xếp dữ liệu theo giá trị thay vì theo khóa—ví dụ khi muốn xếp hạng học viên theo điểm số.

Cách sắp xếp dictionary theo giá trị trong Python

Bây giờ, hãy xem kỹ hơn hàm .sorted() trong Python và cách sử dụng nó để sắp xếp dictionary theo giá trị.

Cách sắp xếp dictionary theo giá trị bằng .sorted()

Hàm .sorted() là công cụ mạnh mẽ và linh hoạt để sắp xếp trong Python. Để sắp xếp dictionary theo giá trị, chúng ta có thể dùng một hàm lambda để chỉ định rằng việc sắp xếp dựa trên giá trị của dictionary.

student_scores = {
    'Alex': 88,
    'Ben': 75,
    'Cyrus': 93,
    'Denver': 85
}
sorted_by_values = dict(sorted(student_scores.items(), key=lambda item: item[1]))

print(sorted_by_values)

# Expected output: 
# {'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}

Trong ví dụ này, student_scores.items() trả về một đối tượng view hiển thị một danh sách các cặp tuple khóa–giá trị của dictionary. Hàm .sorted() sắp xếp các cặp này theo giá trị (item[1]), và dict() chuyển danh sách đã sắp xếp trở lại thành dictionary.

Cách sắp xếp dictionary theo thứ tự giảm dần hoặc tăng dần

Mặc định, hàm .sorted() sắp xếp theo thứ tự tăng dần. Tuy nhiên, tùy tình huống, chúng ta có thể dễ dàng điều chỉnh để sắp xếp theo thứ tự giảm dần hoặc tăng dần bằng cách đặt tham số reverse thành True hoặc False.

Cách sắp xếp dictionary theo thứ tự tăng dần

Như đã đề cập, khi dùng hàm .sorted(), dictionary sẽ được sắp xếp theo thứ tự tăng dần theo mặc định. Chúng ta cũng có thể đạt thứ tự tăng dần bằng cách đặt tham số reverse thành False.

sorted_by_values_asc = dict(sorted(student_scores.items(), key=lambda item: item[1], reverse=False))
print(sorted_by_values_asc)

# Expected output:
# {'Ben': 75, 'Denver': 85, 'Alex': 88, 'Cyrus': 93}

Cách sắp xếp dictionary theo thứ tự giảm dần

Nếu muốn sắp xếp theo thứ tự giảm dần, chúng ta có thể đặt tham số reverse thành True.

sorted_by_values_desc = dict(sorted(student_scores.items(), key=lambda item: item[1], reverse=True))
print(sorted_by_values_desc)

# Expected output:
# {'Cyrus': 93, 'Alex': 88, 'Denver': 85, 'Ben': 75}

Bonus: Cách sắp xếp dictionary theo khóa trong Python

Mặc dù bài viết tập trung vào sắp xếp theo giá trị, biết cách sắp xếp dictionary theo khóa cũng hữu ích. Ta có thể thực hiện tương tự bằng hàm .sorted().

sorted_by_keys = dict(sorted(student_scores.items()))
print(sorted_by_keys)

# Expected output:
# {'Alex': 88, 'Ben': 75, 'Cyrus': 93, 'Denver': 85}

Với thứ tự giảm dần, chỉ cần đặt reverse=True:

sorted_by_keys_desc = dict(sorted(student_scores.items(), reverse=True))
print(sorted_by_keys_desc)

# Expected output:
# {'Denver': 85', 'Cyrus': 93, 'Ben': 75, 'Alex': 88}

Kết luận

Sắp xếp dictionary theo giá trị trong Python là một tác vụ phổ biến có thể thực hiện dễ dàng bằng hàm .sorted(). Dù bạn cần dữ liệu theo thứ tự tăng dần hay giảm dần, nắm vững các kỹ thuật này sẽ giúp công việc xử lý dữ liệu trở nên rõ ràng và hiệu quả hơn. Bằng cách thành thạo các phương pháp sắp xếp này, bạn có thể đảm bảo dữ liệu luôn được tổ chức nhất quán để phục vụ tốt nhất cho nhu cầu của mình.

Câu hỏi thường gặp

Q1: Tôi có thể sắp xếp dictionary theo giá trị nếu các giá trị là chuỗi thay vì số không?

A1: Có, chúng ta có thể sắp xếp dictionary theo giá trị ngay cả khi giá trị là chuỗi. Hàm .sorted() sẽ sắp xếp các giá trị theo thứ tự chữ cái tăng dần hoặc giảm dần, tương tự như với số.

Q2: Làm thế nào để sắp xếp dictionary theo giá trị nếu nó chứa các dictionary lồng nhau?

A2: Để sắp xếp một dictionary có chứa các dictionary lồng nhau, chúng ta cần định nghĩa một hàm sắp xếp tùy chỉnh để trích xuất và so sánh các giá trị lồng nhau liên quan. Việc này đòi hỏi một hàm lambda phức tạp hơn hoặc một hàm riêng để xử lý so sánh.

Q3: Tôi có thể sắp xếp dictionary theo giá trị ngay tại chỗ mà không tạo dictionary mới không?

A3: Không, các dictionary trong Python vốn dĩ là tập hợp không có thứ tự đối với các phiên bản trước 3.7, và dù từ Python 3.7 trở đi chúng duy trì thứ tự chèn, vẫn không có phương thức tích hợp để sắp xếp tại chỗ. Sắp xếp dictionary luôn tạo ra một dictionary mới với thứ tự mong muốn.

Q4: Độ phức tạp thời gian khi sắp xếp dictionary theo giá trị trong Python là gì?

A4: Độ phức tạp thời gian khi sắp xếp dictionary theo giá trị bằng hàm .sorted() là O(n log n), với n là số cặp khóa–giá trị trong dictionary. Điều này là do .sorted() bên trong sử dụng Timsort, một thuật toán sắp xếp lai có độ phức tạp này.

Q5: Việc sắp xếp dictionary theo giá trị có làm thay đổi dictionary gốc không?

A5: Không, sắp xếp dictionary theo giá trị bằng hàm .sorted() sẽ tạo ra một dictionary mới. Dictionary gốc không bị thay đổi.

Neetika Khandelwal

Tác giả

Neetika Khandelwal

Tôi là một lập trình viên Java và tác giả kỹ thuật dày dạn, chuyên về khoa học dữ liệu, trí tuệ nhân tạo (AI) và lập trình Java. Với hơn 3+ năm kinh nghiệm phát triển phần mềm, tôi đã trau dồi chuyên môn vững vàng trong việc xây dựng các ứng dụng mạnh mẽ, có khả năng mở rộng và tận dụng tính linh hoạt của Java để giải quyết những bài toán phức tạp. Tôi đam mê chia sẻ kiến thức với cộng đồng công nghệ rộng lớn. Thông qua các bài viết kỹ thuật chuyên sâu, hướng dẫn và tài liệu, tôi cố gắng làm sáng tỏ những chủ đề phức tạp về khoa học dữ liệu và AI, giúp chúng trở nên dễ tiếp cận đối với cả người mới bắt đầu và các chuyên gia giàu kinh nghiệm. Hiện tại, tôi đã xuất bản hơn 125+ bài blog.

Chủ đề

Liên quan