Làm thế nào để bạn sắp xếp một từ điển theo thứ tự tăng dần trong python?

Từ điển trong Python là tập hợp các mục lưu trữ dữ liệu dưới dạng cặp khóa-giá trị. Trong Trăn 3. 7 và các phiên bản mới hơn, từ điển được sắp xếp theo thứ tự chèn mục. Trong các phiên bản trước, chúng không có thứ tự

Trong bài viết này, chúng ta sẽ xem cách chúng ta có thể sắp xếp một từ điển dựa trên các giá trị mà chúng chứa

Sắp xếp từ điển bằng vòng lặp for

Chúng ta có thể sắp xếp một từ điển với sự trợ giúp của vòng lặp word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }0. Đầu tiên, chúng ta sử dụng hàm word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }1 để sắp xếp thứ tự các giá trị của từ điển. Sau đó, chúng tôi lặp qua các giá trị đã sắp xếp, tìm khóa cho từng giá trị. Chúng tôi thêm các cặp khóa-giá trị này theo thứ tự đã sắp xếp vào một từ điển mới

Ghi chú. Sắp xếp không cho phép bạn sắp xếp lại từ điển tại chỗ. Chúng tôi đang viết các cặp theo thứ tự trong một từ điển hoàn toàn mới, trống rỗng

Nếu bạn chạy cái này với trình thông dịch Python, bạn sẽ thấy

{1: 1, 3: 4, 2: 9}

Bây giờ chúng ta đã biết cách sắp xếp bằng các vòng lặp, hãy xem xét một giải pháp thay thế phổ biến hơn sử dụng hàm word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }1

Sắp xếp từ điển bằng hàm sorted()

Trước đây chúng ta đã sử dụng hàm word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }1 để sắp xếp các giá trị của một mảng. Khi sắp xếp từ điển, chúng ta có thể truyền thêm một đối số cho hàm word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }1 như thế này. word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }5

Ở đây, word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }6 là một hàm được gọi trên từng phần tử trước khi các giá trị được so sánh để sắp xếp. Phương thức word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }7 trên các đối tượng từ điển trả về giá trị của khóa của từ điển

Biểu thức word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }5 sẽ trả về danh sách các khóa có giá trị được sắp xếp theo thứ tự. Từ đó, chúng ta có thể tạo một từ điển mới, được sắp xếp

Sử dụng hàm word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }1 đã giảm số lượng mã chúng tôi phải viết khi sử dụng vòng lặp word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }0. Tuy nhiên, chúng ta có thể kết hợp thêm hàm word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }1 với hàm word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }03 để có giải pháp sắp xếp từ điển theo giá trị ngắn gọn hơn

Sắp xếp từ điển Sử dụng toán tử Mô-đun và itemgetter()

Mô-đun word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }04 bao gồm chức năng word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }03. Hàm này trả về một đối tượng có thể gọi được trả về một mục từ một đối tượng

Ví dụ: hãy sử dụng word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }03 để tạo đối tượng có thể gọi trả về giá trị của bất kỳ từ điển nào có khóa là word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }07

Mọi từ điển đều có quyền truy cập vào phương thức word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }08. Hàm này trả về các cặp khóa-giá trị của từ điển dưới dạng danh sách các bộ. Chúng ta có thể sắp xếp danh sách các bộ dữ liệu bằng cách sử dụng hàm word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }03 để lấy giá trị thứ hai của bộ dữ liệu i. e. giá trị của các khóa trong từ điển

Sau khi nó được sắp xếp, chúng ta có thể tạo một từ điển dựa trên các giá trị đó

Với ít nỗ lực hơn, chúng tôi có một từ điển được sắp xếp theo giá trị

Vì đối số word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }6 chấp nhận bất kỳ hàm nào, chúng ta có thể sử dụng các hàm lambda để trả về các giá trị từ điển để chúng có thể được sắp xếp. Hãy xem làm thế nào

Sắp xếp từ điển bằng hàm Lambda

Các hàm lambda là các hàm ẩn danh hoặc không tên trong Python. Chúng ta có thể sử dụng các hàm lambda để lấy giá trị của một mục từ điển mà không cần phải nhập mô-đun word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }04 cho word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }03. Nếu muốn tìm hiểu thêm về lambda, bạn có thể đọc về chúng trong hướng dẫn của chúng tôi về Hàm Lambda trong Python

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Hãy sắp xếp từ điển theo giá trị bằng cách sử dụng hàm lambda trong đối số word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }6 của word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }1

Lưu ý rằng các phương pháp chúng ta đã thảo luận cho đến nay chỉ hoạt động với Python 3. 7 trở lên. Hãy xem những gì chúng ta có thể làm cho các phiên bản Python cũ hơn

Trả lại một từ điển mới với các giá trị được sắp xếp

Sau khi sắp xếp từ điển theo giá trị, để giữ từ điển đã sắp xếp trong các phiên bản Python trước 3. 7, bạn phải sử dụng word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }15 - có sẵn trong mô-đun word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }16. Các đối tượng này là từ điển giữ thứ tự chèn

Đây là một ví dụ về sắp xếp và sử dụng word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }15

Phần kết luận

Hướng dẫn này cho thấy cách một từ điển có thể được sắp xếp dựa trên các giá trị của nó. Đầu tiên chúng tôi sắp xếp một từ điển bằng cách sử dụng hai vòng lặp for. Sau đó, chúng tôi đã cải thiện việc sắp xếp của mình bằng cách sử dụng hàm word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }1. Chúng ta cũng đã thấy hàm word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }03 từ mô-đun word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }04 có thể làm cho giải pháp của chúng ta ngắn gọn hơn

Cuối cùng, chúng tôi đã điều chỉnh giải pháp của mình để hoạt động trên các phiên bản Python thấp hơn 3. 7

Các biến thể của hàm word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }1 là phổ biến và đáng tin cậy nhất để sắp xếp từ điển theo giá trị

Trong bài viết này, chúng ta sẽ thảo luận về các cách khác nhau để sắp xếp từ điển python theo các giá trị theo cả thứ tự tăng dần và giảm dần bằng cách sử dụng hàm sorted()  bằng cách sử dụng hàm lambda hoặc itemgetter() làm đối số chính


Mục lục

  • Tổng quan về hàm Sorted() trong python
  • Sắp xếp từ điển theo giá trị bằng hàm sorted() và lambda trong python
  • Sắp xếp từ điển theo giá trị theo thứ tự giảm dần bằng hàm lambda trong python
  • Sắp xếp từ điển theo giá trị bằng sorted() & itemgetter trong python
  • Sắp xếp từ điển theo giá trị theo thứ tự giảm dần bằng cách sử dụng itemgetter trong python

Giả sử chúng ta có một cuốn từ điển,

word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2, }

Bây giờ chúng tôi muốn sắp xếp từ điển này dựa trên các giá trị. Phiên bản được sắp xếp phải như thế nào,

{'is': 2, 'here': 5, 'at': 9, 'this': 11, 'why': 12}

Để làm điều này, chúng ta sẽ sử dụng hàm sorted(). Trước tiên chúng ta hãy có một chút tổng quan về hàm sorted(),

Tổng quan về hàm Sorted() trong python

Python cung cấp chức năng sắp xếp các mục theo trình tự có thể lặp lại. e

sorted(iterable, key=key, reverse=reverse)
  • Nó chấp nhận một trình tự có thể lặp lại làm đối số đầu tiên và trả về một danh sách các mục đã được sắp xếp trong trình tự đó
  • Theo mặc định, nó sử dụng toán tử < để so sánh các phần tử trong chuỗi, nhưng nếu một đối số chính (Hàm gọi lại) được cung cấp, thì nó sẽ sử dụng đối số đó để so sánh các mục trong chuỗi khi sắp xếp
  • Giá trị mặc định của đối số ngược lại là True; . Để sắp xếp chúng theo thứ tự giảm dần, hãy cung cấp đối số ngược lại là Sai

Từ điển trong python cũng là một chuỗi các cặp khóa-giá trị có thể lặp lại. Vì vậy, để sắp xếp một từ điển, chúng ta có thể sử dụng hàm sorted(),

Sắp xếp từ điển theo giá trị bằng hàm sorted() và lambda trong python

Nếu chúng ta chuyển từ điển của mình cho hàm sorted() mà không có bất kỳ đối số nào khác. Sau đó, hàm sorted() sẽ sắp xếp các cặp khóa-giá trị trong  từ điển bằng cách so sánh chúng bằng < toán tử i. e. theo mặc định các mục trong từ điển sẽ được sắp xếp theo khóa. Nhưng thay vào đó, chúng tôi muốn sắp xếp các mục theo giá trị. Đối với điều này, chúng ta cần chuyển hàm khóa làm đối số cho hàm được sắp xếp i. e

word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2 } # Sort Dictionary by value in descending order using lambda function sorted_dict = dict( sorted(word_dict.items(), key=lambda item: item[1], reverse=True)) print('Sorted Dictionary: ') print(sorted_dict)

đầu ra

Sorted Dictionary: {'is': 2, 'here': 5, 'at': 9, 'this': 11, 'why': 12}

Nó trả về một từ điển mới, được sắp xếp theo giá trị

Nhưng nó đã hoạt động như thế nào?

Nó đã sắp xếp các cặp khóa-giá trị trong từ điển bằng cách so sánh chúng bằng cách sử dụng bộ so sánh được chuyển làm đối số khóa. Trong trường hợp của chúng tôi, chúng tôi đã chuyển một hàm lambda chấp nhận một cặp khóa-giá trị làm đối số và trả về trường giá trị từ cặp đó. Giờ đây, khi sắp xếp các mục trong  từ điển, hàm sorted() đã chuyển từng cặp khóa-giá trị cho hàm lambda đã cho này và sử dụng giá trị được trả về để so sánh các mục. Do đó, từ điển của chúng tôi được sắp xếp theo giá trị

Sắp xếp từ điển theo giá trị theo thứ tự giảm dần bằng hàm lambda trong python

Ngoài hàm lambda như trong ví dụ trước, còn truyền đối số ngược lại là True cho hàm sorted(). Nó sẽ sắp xếp các mục trong từ điển theo giá trị, nhưng theo thứ tự giảm dần tôi. e

word_dict = { 'this': 11, 'at': 9, 'here': 5, 'why': 12, 'is': 2 } # Sort Dictionary by value in descending order using lambda function sorted_dict = dict( sorted(word_dict.items(), key=lambda item: item[1], reverse=True)) print('Sorted Dictionary: ') print(sorted_dict)

đầu ra

{'why': 12, 'this': 11, 'at': 9, 'here': 5, 'is': 2}

Sắp xếp từ điển theo giá trị bằng sorted() & itemgetter trong python

Mô-đun toán tử của Python cung cấp một itemgetter, đối tượng của nó sẽ tìm nạp mục đã cho từ toán hạng của nó. Nó có nghĩa là,

  • itemgetter(2)(r) trả về r[2]
  • itemgetter(1)(r) trả về r[1]

Chúng ta có thể chuyển đối tượng itemgetter làm đối số khóa trong hàm sorted(), để tìm nạp trường giá trị từ mỗi mục khóa-giá trị của từ điển trong khi sắp xếp i. e

________số 8

đầu ra

Sorted Dictionary: {'is': 2, 'here': 5, 'at': 9, 'this': 11, 'why': 12}

Ở đây, itemgetter(1) đã trả về trường giá trị từ cặp khóa-giá trị. Do đó, từ điển được sắp xếp theo giá trị

Sắp xếp từ điển theo giá trị theo thứ tự giảm dần bằng cách sử dụng itemgetter trong python

Ngoài đối tượng itemgetter làm đối số chính như trong ví dụ trước, hãy chuyển đối số ngược lại thành True cho hàm sorted() . Nó sẽ sắp xếp các mục trong từ điển theo giá trị, nhưng theo thứ tự giảm dần tôi. e

Chủ đề