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
- Tạo từ điển các cặp khóa-giá trị
- Quyết định xem bạn muốn sắp xếp theo khóa hay giá trị
- Chọn giữa thứ tự tăng dần và giảm dần
- 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
- Bằng phím
- theo thứ tự tăng dần
- Thứ tự giảm dần
- Theo giá trị
- theo thứ tự tăng dần
- 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 90
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 91
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 92
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 93
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 94
đầu ra
Alice 72 Charlie 36 Bob 23 Eric 18 David 95
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 96
Ở đâ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 93
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 98
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 99
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 95
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
- Lấy các cặp khóa-giá trị
- 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
- 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