Có thể sắp xếp trong từ điển trong python không?

Trong Trăn 3. 7+ có thể sắp xếp từ điển. Trước Python 3. 7 từ điển không có thứ tự và do đó bạn không thể sắp xếp chúng

Để sắp xếp một từ điển trong Python

  1. Tạo từ điển các cặp khóa-giá trị
  2. Quyết định xem bạn muốn sắp xếp theo khóa hay giá trị
  3. Chọn giữa thứ tự tăng dần và giảm dần
  4. Gọi hàm sorted[] tích hợp trên các mục từ điển

Ví dụ: hãy sắp xếp một từ điển theo giá trị giảm dần và in ra các giá trị đã sắp xếp

data = {
	"Bob": 23,
	"Charlie": 36,
	"Alice": 72,
	"Eric": 18,
	"David": 9
}

sort_data = sorted[data.items[], key=lambda x: x[1], reverse=True]

for i in sort_data:
	print[i[0], i[1]]

Điều này mang lại một đầu ra sau

Alice 72
Charlie 36
Bob 23
Eric 18
David 9

Đây là một hướng dẫn toàn diện để sắp xếp từ điển trong Python. Trong hướng dẫn này, bạn học cách sắp xếp một từ điển

  1. Bằng phím
    1. theo thứ tự tăng dần
    2. Thứ tự giảm dần
  2. Theo giá trị
    1. theo thứ tự tăng dần
    2. Thứ tự giảm dần

Bên cạnh đó, bạn sẽ đi sâu vào các đối số của hàm sorted[] để thực sự hiểu cách thức hoạt động của nó

Hàm sắp xếp Python []

Trong Python, có một hàm sorted[] tích hợp sẵn mà bạn có thể sử dụng để sắp xếp các lần lặp, chẳng hạn như danh sách hoặc từ điển

Cú pháp của hàm sorted[] là

sorted[iterable, key=None, reverse=False]

Chúng ta hãy xem xét kỹ hơn các đối số của hàm sorted[]

  • iterable là một chuỗi hoặc tập hợp các giá trị [chẳng hạn như danh sách, dict, chuỗi] sẽ được sắp xếp
  • đảo ngược là một tham số tùy chọn. Theo mặc định, điều ngược lại là Sai
    • Nếu điều ngược lại là True, việc sắp xếp sẽ diễn ra theo thứ tự giảm dần
    • Nếu điều ngược lại là Sai, việc sắp xếp sẽ diễn ra theo thứ tự tăng dần
  • key là một tham số tùy chọn. Nó cung cấp chức năng sắp xếp theo đó các phần tử được sắp xếp

Hãy xem hoạt động của hàm sorted[] bằng cách sắp xếp từ điển theo nhiều cách khác nhau

Cách sắp xếp từ điển theo giá trị

Trong Python, từ điển là tập hợp các cặp khóa-giá trị. Ý tưởng của một từ điển là lưu trữ các giá trị có thể truy cập thông qua các khóa, thay vì các chỉ mục như trong danh sách. Điều này làm cho từ điển lưu trữ dữ liệu tuyệt vời cho dữ liệu được gắn nhãn và có cấu trúc

Chẳng hạn, bạn có thể có một từ điển đại diện cho các sinh viên của một lớp. Mỗi học sinh có thể được liên kết với dữ liệu như tên, tuổi, điểm, v.v.

Dù sao, mục đích của hướng dẫn này không phải dạy từ điển là gì mà dạy cách sắp xếp từ điển. Cụ thể hơn, bây giờ bạn sẽ thấy cách sắp xếp từ điển trong Python ở

  • Thứ tự tăng dần
  • Thứ tự giảm dần

Để sắp xếp từ điển theo giá trị, bạn cần cho hàm sorted[] biết điều đó. Theo mặc định, hàm sorted[] sắp xếp từ điển theo các phím

Để hàm sorted[] biết bạn muốn sắp xếp từ điển theo giá trị, hãy chỉ định tham số khóa tùy chọn trong lệnh gọi hàm

Tham số chính đóng vai trò là chức năng sắp xếp. Nói cách khác, sorted[] thực hiện thuật toán sắp xếp tích hợp trên các phần tử của danh sách và gọi hàm khóa cho từng phần tử để sắp xếp chúng theo cách mong muốn

Để sắp xếp theo thứ tự tăng dần, chức năng chính là tầm thường. Nó chỉ cần làm là lấy một cặp khóa-giá trị làm đầu vào và trả về giá trị làm đầu ra. Để tạo một hàm như vậy, bạn có thể sử dụng hàm lambda

Hãy xem một số ví dụ

Sắp xếp theo giá trị. Thứ tự tăng dần

Ví dụ: đưa ra một từ điển dữ liệu gồm tên sinh viên được ánh xạ theo độ tuổi của họ, hãy sắp xếp dữ liệu từ điển theo thứ tự tuổi tăng dần

Nhân tiện, hàm sorted[] không trả về từ điển. Nó trả về một danh sách các bộ đại diện cho các khóa và giá trị từ điển. Để biến kết quả thành từ điển, bạn cần gọi hàm dict[] trên đó

Đây là mã

data = {
	"Bob": 23,
	"Charlie": 36,
	"Alice": 72,
	"Eric": 18,
	"David": 9
}

sort_data = sorted[data.items[], key=lambda x: x[1]]

sort_data_dict = dict[sort_data]
print[sort_data_dict]

đầu ra

{'David': 9, 'Eric': 18, 'Bob': 23, 'Charlie': 36, 'Alice': 72}

Để chắc chắn rằng bạn hiểu điều gì đang xảy ra, ở phần sau của hướng dẫn này, bạn sẽ xem xét kỹ hơn key=lamda x. x[1] và cách hoạt động. Bây giờ, hãy tiếp tục sắp xếp

Sắp xếp theo giá trị. Thứ tự giảm dần

Trong ví dụ trước, bạn đã thấy cách sắp xếp các giá trị từ điển theo thứ tự tăng dần. Lần này, hãy lặp lại ví dụ, nhưng thay vì tăng dần, hãy sắp xếp các giá trị theo thứ tự giảm dần

Để sắp xếp theo thứ tự giảm dần, chỉ định đặt tham số đảo ngược True

Đây là giao diện của nó trong mã

data = {
	"Bob": 23,
	"Charlie": 36,
	"Alice": 72,
	"Eric": 18,
	"David": 9
}

sort_data = sorted[data.items[], key=lambda x: x[1], reverse=True]

sort_data_dict = dict[sort_data]
print[sort_data_dict]

đầu ra

{'Alice': 72, 'Charlie': 36, 'Bob': 23, 'Eric': 18, 'David': 9}

Tiếp theo, chúng ta hãy xem cách sắp xếp từ điển theo khóa

Cách sắp xếp từ điển theo khóa

Để sắp xếp từ điển theo các khóa trong Python, hãy gọi hàm sorted[] trên các mục từ điển

Nhân tiện, hàm sorted[] sắp xếp từ điển theo khóa theo mặc định, vì vậy việc này dễ dàng hơn một chút so với sắp xếp theo giá trị

Để hoàn thiện, chúng ta hãy xem một số ví dụ về sắp xếp các phím theo cả thứ tự tăng dần và giảm dần

ví dụ 1. Thứ tự tăng dần

Ví dụ: hãy sắp xếp từ điển dữ liệu tên-tuổi theo tên theo thứ tự tăng dần [bảng chữ cái]

data = {
	"Bob": 23,
	"Charlie": 36,
	"Alice": 72,
	"Eric": 18,
	"David": 9
}

sort_data = sorted[data.items[]]

sort_data_dict = dict[sort_data]
print[sort_data_dict]

đầu ra

________số 8_______

ví dụ 2. Thứ tự giảm dần

Ví dụ: hãy sắp xếp từ điển dữ liệu tên-tuổi theo tên theo thứ tự giảm dần [ngược bảng chữ cái]

data = {
	"Bob": 23,
	"Charlie": 36,
	"Alice": 72,
	"Eric": 18,
	"David": 9
}

sort_data = sorted[data.items[], reverse=True]

sort_data_dict = dict[sort_data]
print[sort_data_dict]

đầu ra

Alice 72
Charlie 36
Bob 23
Eric 18
David 9
0

Bây giờ bạn đã hiểu cách sắp xếp từ điển trong Python

Tiếp theo, chúng ta hãy tìm hiểu sâu hơn về các đối số của lệnh gọi hàm sorted[]. Nếu bạn hiểu mọi thứ cho đến nay, vui lòng bỏ qua chương này

Tham số hàm sorted[]. Một cái nhìn chi tiết

Bạn có gặp khó khăn trong việc hiểu cách sắp xếp từ điển thực sự hoạt động trong các ví dụ trên do các biểu thức lambda không?

Chương này tập trung vào chi tiết các tham số trong hàm sorted[]

Ở phần cuối của phần này, bạn sẽ hiểu rõ hơn về loại cuộc gọi này thực sự là gì

Alice 72
Charlie 36
Bob 23
Eric 18
David 9
1

Hãy bắt đầu với đối số đầu tiên, đó là, dict. mặt hàng[]

Đối số 1. mệnh lệnh. mặt hàng[]

Khi xử lý từ điển trong Python, bạn có thể truy cập các cặp khóa-giá trị bằng cách sử dụng toán tử truy cập dấu ngoặc vuông []

Alice 72
Charlie 36
Bob 23
Eric 18
David 9
2

Nhưng khi lặp qua một từ điển, bạn không thể trực tiếp sử dụng từ điển nguyên trạng. Thay vào đó, bạn cần chuyển đổi các đối tượng từ điển thành một chuỗi các bộ, trong đó mỗi bộ

  • Yếu tố đầu tiên là chìa khóa
  • Phần tử thứ hai là một cặp

Để làm điều này, có một từ điển phương pháp tích hợp. mặt hàng[]

mang về nhà. Bất cứ khi nào bạn muốn lặp qua từ điển, bạn chỉ có thể truy cập dữ liệu khóa-giá trị thông qua từ điển. phương thức item[]

Điều tương tự cũng áp dụng cho việc sắp xếp từ điển bằng hàm sorted[]. Hàm sorted[] thực hiện vòng lặp ngầm, vì vậy thay vì cung cấp từ điển, bạn cần cung cấp cho nó một chuỗi các bộ giá trị khóa để làm việc với. Vì vậy, sử dụng từ điển. mặt hàng[]

Tiếp theo, chúng ta hãy xem đối số lambda. Đây có lẽ là phần khó hiểu nhất trong lệnh gọi hàm sorted[]. Nó đòi hỏi khá nhiều lời giải thích để bạn hiểu đầy đủ những gì đang xảy ra

Đối số 2. khóa = lambda x. x[1]

Tham số key là tham số tùy chọn trong hàm sorted[]. Nó đóng vai trò là chức năng sắp xếp mà thuật toán đằng sau hậu trường chạy trên từng thành phần của từ điển

Khi sắp xếp từ điển, cách sắp xếp mặc định là theo khóa. Để thay đổi phương thức sắp xếp, bạn cần nói với hàm sorted[] rằng bạn muốn sử dụng các giá trị nào để thay thế

Để giao tiếp với hàm sorted[], bạn cần chỉ định tham số chính là hàm sắp xếp. Để sắp xếp theo giá trị, bộ sắp xếp phải lấy một cặp khóa-giá trị từ từ điển và trả về giá trị của nó

Bạn có thể sử dụng một chức năng thông thường để làm điều này

Ví dụ: đây là một hàm nhận một cặp khóa-giá trị và trả về giá trị

Alice 72
Charlie 36
Bob 23
Eric 18
David 9
3

Bây giờ, bạn có thể chuyển hàm này làm tham số chính trong lệnh gọi hàm sorted[]

Ví dụ: hãy sắp xếp từ điển tên và tuổi theo độ tuổi [nghĩa là theo giá trị]

Alice 72
Charlie 36
Bob 23
Eric 18
David 9
4

đầu ra

Alice 72
Charlie 36
Bob 23
Eric 18
David 9
5

Bây giờ, chúng ta hãy xem xét kỹ hơn về cách thức và lý do điều này hoạt động. Dưới mui xe, hàm sorted[]

  • Lặp qua từng cặp khóa-giá trị
  • Lấy từng cặp một và gọi hàm getvalue cho từng cặp
  • Sắp xếp dữ liệu dựa trên những gì hàm getvalue trả về

Trong trường hợp này, hàm trả về giá trị, vì vậy hàm sorted[] xem xét từng giá trị và sắp xếp từ điển dựa trên các giá trị

Bây giờ bạn đã hiểu rõ hơn về cách thức hoạt động của chức năng phím khi sắp xếp từ điển

Tiếp theo, chúng ta hãy xem một số phương pháp hay nhất và hàm lambda

Sử dụng Lambdas thay vì các chức năng truyền thống

Khi nói đến các phương pháp hay nhất, việc chỉ định một chức năng riêng biệt để sắp xếp từ điển sẽ giới thiệu các dòng mã không cần thiết

Trong ví dụ trước, bạn chỉ sử dụng hàm getvalue một lần. Điều này có nghĩa là sau khi sắp xếp, bạn để một định nghĩa hàm vô dụng treo trong cơ sở mã của mình. Đó không phải là lý tưởng

Đây là nơi các chức năng lambda trợ giúp

Hàm lambda là một hàm ẩn danh không có tên. Nó có thể nhận bất kỳ số lượng đối số nào nhưng chỉ có một biểu thức duy nhất. Bạn có thể chỉ định một hàm lambda để thay thế các hàm một biểu thức đơn giản trong các tình huống như thế này

Cú pháp của hàm lambda trong Python nói chung là

Alice 72
Charlie 36
Bob 23
Eric 18
David 9
6

Ở đây, các đối số không có gì khác ngoài các đối số hàm truyền thống và biểu thức là một dòng mã Python chạy một hàm với các đối số trả về kết quả

Để minh họa cách hoạt động của lambda, hãy chuyển đổi hàm getvalue thành biểu thức lambda

Vì vậy, bạn có một hàm getvalue truyền thống trông như thế này

Alice 72
Charlie 36
Bob 23
Eric 18
David 9
3

Bây giờ, hãy chuyển đổi biểu thức này thành biểu thức lambda

Alice 72
Charlie 36
Bob 23
Eric 18
David 9
8

Biểu thức lambda hoạt động giống hệt như hàm getvalue

Nhưng vì lambda không có tên nên bạn không thể tham khảo nó theo bất kỳ cách nào. Nói cách khác, biểu thức lambda là vô dụng như một biểu thức độc lập như đã thấy ở trên

Để có thể sử dụng lambda, bạn cần gọi nó ngay. Do đó, bạn thường sử dụng các hàm lambda làm đối số trong các lệnh gọi hàm khác

Bây giờ, hãy quay lại sắp xếp một từ điển

Thay vì chỉ định riêng một hàm getvalue, hãy sử dụng biểu thức lambda

Alice 72
Charlie 36
Bob 23
Eric 18
David 9
9

Theo một nghĩa nào đó, bây giờ bạn đã triển khai hàm getvalue trực tiếp vào lệnh gọi hàm sorted[] và sử dụng nó ngay lập tức

Đây là đầu ra

Alice 72
Charlie 36
Bob 23
Eric 18
David 9
5

Sử dụng lambda theo cách này, bạn có thể làm cho mã ngắn hơn và có chất lượng tốt hơn

Lưu ý rằng bạn có thể đặt tên cho các đối số lambda theo cách bạn muốn. Bạn không cần phải sử dụng cặp từ. Thay vào đó, bạn chỉ cần sử dụng x như chúng tôi đã làm trước đó trong hướng dẫn này

sorted[iterable, key=None, reverse=False]
1

Bây giờ bạn đã hiểu cách thức hoạt động của hàm key trong lệnh gọi hàm sorted[]

Một điều nữa về chức năng chính. Chức năng chính cũng có thể là một chức năng phức tạp hơn

Chẳng hạn, hãy sắp xếp từ điển bằng cách kiểm tra xem giá trị tuổi có chẵn không [chia hết cho 2]

sorted[iterable, key=None, reverse=False]
2

đầu ra

sorted[iterable, key=None, reverse=False]
3

Từ điển trên được sắp xếp sao cho tuổi của số lẻ xuất hiện đầu tiên và tuổi của giá trị chẵn cuối cùng. Một cách khác để nghĩ về nó là dữ liệu độ tuổi được sắp xếp sao cho “độ đồng đều” tăng lên khi bạn đi xa hơn về bên phải. Đây là lý do tại sao các giá trị lẻ xuất hiện trước và các giá trị chẵn theo sau

Nếu bạn chưa biết về lambdas trước khi đọc bài viết này, tôi thực sự khuyên bạn nên đọc Lambdas trong Python để hiểu rõ hơn về khái niệm quan trọng này

Đối số 3. đảo ngược = Đúng

Đối số đảo ngược là đối số thứ ba trong lệnh gọi hàm sorted[]. Đây là một đối số tùy chọn. Nó chỉ định thứ tự sắp xếp được thực hiện

Theo mặc định, đối số ngược lại là Sai

Điều này có nghĩa là thứ tự sắp xếp tăng dần theo mặc định

Tuy nhiên, để thay đổi hướng, bạn có thể đặt đối số ngược lại là True

Tuyệt vời. Bây giờ bạn đã hiểu hàm sorted[] thực sự hoạt động như thế nào

Cuối cùng, hãy xem cách sắp xếp từ điển được thực hiện trong các phiên bản Python dưới 3. 7

Sắp xếp từ điển trước Python 3. 7

Trước Python 3. 7, từ điển không có thứ tự. Điều này có nghĩa là sắp xếp là một hoạt động vô nghĩa vì dù sao thì dữ liệu cũng sẽ không theo thứ tự

Tuy nhiên, các loại dữ liệu khác như danh sách và bộ dữ liệu được sắp xếp theo thứ tự. Hơn nữa, có một kiểu dữ liệu riêng cho các từ điển được sắp xếp gọi là OrderedDict

Điều này có nghĩa là bạn có thể sắp xếp từ điển bằng cách làm theo các bước sau

  1. Lấy các cặp khóa-giá trị
  2. Sắp xếp các cặp khóa-giá trị. Điều này cung cấp cho bạn một danh sách các bộ dữ liệu được sắp xếp
  3. Chèn danh sách các bộ đã sắp xếp vào OrderedDict

Đây là một ví dụ

sorted[iterable, key=None, reverse=False]
4

đầu ra

sorted[iterable, key=None, reverse=False]
5

Bạn có thể truy cập các phần tử đối tượng OrderedDict giống như cách bạn sử dụng từ điển thông thường

Phần kết luận

Hôm nay bạn đã học cách sắp xếp từ điển trong Python

Tóm lại, kể từ Python 3. 7, từ điển giữ nguyên thứ tự chèn. Nói cách khác, bạn có thể sắp xếp một từ điển

Có thể sắp xếp từ điển bằng Python không?

Để sắp xếp từ điển theo giá trị trong Python bạn có thể sử dụng hàm sorted[] . Hàm sorted[] của Python có thể được sử dụng để sắp xếp từ điển theo khóa, cho phép phương thức sắp xếp tùy chỉnh. sorted[] nhận ba đối số. đối tượng, khóa và đảo ngược. Từ điển là cấu trúc dữ liệu không có thứ tự.

Bạn có thể sắp xếp các khóa trong từ điển Python không?

Từ điển mặc định trong Python là cấu trúc dữ liệu không có thứ tự. Giống như danh sách, chúng ta có thể sử dụng hàm sorted[] để sắp xếp từ điển theo khóa .

Tại sao chúng tôi không thể sắp xếp từ điển trong Python?

Khái niệm sắp xếp chỉ áp dụng cho một tập hợp có thứ tự—nói cách khác, một chuỗi. Một ánh xạ, chẳng hạn như từ điển, không có thứ tự nên không thể sắp xếp.

Chủ Đề