Hướng dẫn python dictionary out of order - từ điển python không theo thứ tự
Tôi chỉ bắt đầu chơi xung quanh với Python (nền VBA). Tại sao từ điển này được tạo ra theo thứ tự? Không nên là A: 1, B: 2 ... vv.? Show
Đây là đầu ra:
Hoặc, nó chỉ được in ra khỏi trật tự? Đôi khi bạn cần một từ điển Python ghi nhớ thứ tự của các mặt hàng của nó. Trước đây, bạn chỉ có một công cụ để giải quyết vấn đề cụ thể này: Python từ 5. Nó có một lớp con từ điển được thiết kế đặc biệt để ghi nhớ thứ tự của các mặt hàng, được xác định bởi thứ tự chèn của các khóa.Điều này đã thay đổi trong Python 3.6. Lớp 6 tích hợp hiện cũng giữ các mục của nó được đặt hàng. Do đó, nhiều người trong cộng đồng Python bây giờ tự hỏi liệu 5 có hữu ích không. Nhìn kỹ hơn 5 sẽ phát hiện ra rằng lớp này vẫn cung cấp các tính năng có giá trị.Trong hướng dẫn này, bạn sẽ học cách:
Với kiến thức này, bạn có thể chọn lớp từ điển phù hợp nhất với nhu cầu của bạn khi bạn muốn bảo tồn thứ tự của các mặt hàng. Đến cuối hướng dẫn, bạn sẽ thấy một ví dụ về việc thực hiện hàng đợi dựa trên từ điển bằng cách sử dụng 5, sẽ khó khăn hơn nếu bạn sử dụng đối tượng 6 thông thường.Lựa chọn giữa >>> from collections import OrderedDict >>> numbers = OrderedDict([("one", 1), ("two", 2), ("three", 3)]) >>> numbers OrderedDict([('one', 1), ('two', 2), ('three', 3)]) >>> letters = OrderedDict({("a", 1), ("b", 2), ("c", 3)}) >>> letters OrderedDict([('c', 3), ('a', 1), ('b', 2)]) 5 và >>> from collections import OrderedDict >>> numbers = OrderedDict([("one", 1), ("two", 2), ("three", 3)]) >>> numbers OrderedDict([('one', 1), ('two', 2), ('three', 3)]) >>> letters = OrderedDict({("a", 1), ("b", 2), ("c", 3)}) >>> letters OrderedDict([('c', 3), ('a', 1), ('b', 2)]) 6Trong nhiều năm, từ điển Python là cấu trúc dữ liệu không đặt hàng. Các nhà phát triển Python đã quen với thực tế này và họ dựa vào danh sách hoặc các chuỗi khác khi họ cần giữ dữ liệu của họ theo thứ tự. Theo thời gian, các nhà phát triển đã tìm thấy một loại từ điển mới, một loại sẽ giữ các mục của nó được đặt hàng. Trở lại năm 2008, PEP 372 đã giới thiệu ý tưởng thêm một lớp từ điển mới vào 8. Mục tiêu chính của nó là ghi nhớ thứ tự của các mặt hàng theo định nghĩa theo thứ tự các khóa được chèn. Đó là nguồn gốc của 5.Các nhà phát triển Core Python muốn điền vào khoảng trống và cung cấp một từ điển có thể bảo tồn thứ tự các khóa được chèn. Điều đó, đến lượt nó, cho phép thực hiện đơn giản hơn các thuật toán cụ thể dựa vào thuộc tính này. 5 đã được thêm vào thư viện tiêu chuẩn trong Python 3.1. API của nó về cơ bản giống như 6. Tuy nhiên, 5 lặp lại trên các khóa và giá trị theo cùng thứ tự mà các khóa được chèn. Nếu một mục mới ghi đè lên một mục nhập hiện có, thì thứ tự không thay đổi. Nếu một mục bị xóa và xác định lại, thì nó sẽ được chuyển đến cuối từ điển.Python 3.6 đã giới thiệu một triển khai mới của 6. Việc triển khai mới này thể hiện một chiến thắng lớn về mặt sử dụng bộ nhớ và hiệu quả lặp lại. Ngoài ra, việc triển khai mới cung cấp một tính năng mới và có phần bất ngờ: các đối tượng 6 hiện giữ các mục của chúng theo cùng thứ tự mà chúng được giới thiệu. Ban đầu, tính năng này được coi là một chi tiết triển khai và tài liệu được khuyên không nên dựa vào nó.Theo lời của Raymond Hettinger, nhà phát triển Core Python và đồng tác giả của 5, lớp được thiết kế đặc biệt để giữ cho các mặt hàng của nó được đặt hàng, trong khi việc triển khai 6 mới được thiết kế để nhỏ gọn và cung cấp nhanh chóng:
Trong Python 3.7, tính năng được đặt hàng của các vật phẩm của các đối tượng 6 đã được tuyên bố là một phần chính thức của đặc tả ngôn ngữ Python. Vì vậy, từ thời điểm đó, các nhà phát triển có thể dựa vào 6 khi họ cần một từ điển giữ cho các mặt hàng của nó được đặt hàng.Tại thời điểm này, một câu hỏi đặt ra: 5 vẫn cần thiết sau khi triển khai 6 mới này? Câu trả lời phụ thuộc vào trường hợp sử dụng cụ thể của bạn và cả về mức độ rõ ràng bạn muốn có trong mã của mình.Tại thời điểm viết bài, một số tính năng của 5 vẫn làm cho nó có giá trị và khác với 6 thông thường:
Có ít nhất một lý do nữa để tiếp tục sử dụng 5 trong mã của bạn: khả năng tương thích ngược. Dựa vào các đối tượng 6 thông thường để bảo tồn thứ tự các mục sẽ phá vỡ mã của bạn trong các môi trường chạy các phiên bản của Python cũ hơn 3,6.backward compatibility. Relying on regular 6 objects to preserve the order of
items will break your code in environments that run versions of Python older than 3.6.Thật khó để nói nếu 6 sẽ sớm thay thế 5. Ngày nay, 5 vẫn cung cấp các tính năng thú vị và có giá trị mà bạn có thể muốn xem xét khi chọn một công cụ cho một công việc nhất định.Bắt đầu với Python từ >>> from collections import OrderedDict >>> numbers = OrderedDict([("one", 1), ("two", 2), ("three", 3)]) >>> numbers OrderedDict([('one', 1), ('two', 2), ('three', 3)]) >>> letters = OrderedDict({("a", 1), ("b", 2), ("c", 3)}) >>> letters OrderedDict([('c', 3), ('a', 1), ('b', 2)]) 5Python sườn 5 là một lớp con 6 bảo tồn thứ tự trong đó các cặp giá trị khóa, thường được gọi là các mục, được đưa vào từ điển. Khi bạn lặp lại một đối tượng 5, các mục được đi qua theo thứ tự ban đầu. Nếu bạn cập nhật giá trị của một khóa hiện có, thì thứ tự vẫn không thay đổi. Nếu bạn loại bỏ một mục và sắp xếp lại nó, thì mục sẽ được thêm vào cuối từ điển.key-value pairs, commonly known as items, are inserted into the dictionary. When you iterate over an 5 object, items are traversed in the original order. If you update the value of an existing key, then the order
remains unchanged. If you remove an item and reinsert it, then the item is added at the end of the dictionary.Là một lớp con 6 có nghĩa là nó kế thừa tất cả các phương pháp mà một từ điển thông thường cung cấp. 5 cũng có các tính năng bổ sung mà bạn sẽ tìm hiểu trong hướng dẫn này. Tuy nhiên, trong phần này, bạn sẽ học được những điều cơ bản về việc tạo và sử dụng các đối tượng 5 trong mã của bạn.Tạo đối tượng >>> from collections import OrderedDict >>> numbers = OrderedDict([("one", 1), ("two", 2), ("three", 3)]) >>> numbers OrderedDict([('one', 1), ('two', 2), ('three', 3)]) >>> letters = OrderedDict({("a", 1), ("b", 2), ("c", 3)}) >>> letters OrderedDict([('c', 3), ('a', 1), ('b', 2)]) 5Không giống như 6, 5 không phải là loại tích hợp, vì vậy bước đầu tiên để tạo các đối tượng 5 là nhập lớp từ 8. Có một số cách để tạo từ điển theo thứ tự. Hầu hết chúng đều giống hệt với cách bạn tạo một đối tượng 6 thông thường. Ví dụ: bạn có thể tạo một đối tượng 5 trống bằng cách khởi tạo lớp mà không có đối số:>>>
Trong trường hợp này, trước tiên bạn nhập 5 từ 8. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 5 mà không cung cấp các đối số cho hàm tạo.Bạn có thể thêm các cặp giá trị khóa vào từ điển bằng cách cung cấp một khóa trong ngoặc vuông ( 8) và gán giá trị cho khóa đó. Khi bạn tham khảo 9, bạn sẽ nhận được một cặp có giá trị khóa giữ các mục theo cùng một thứ tự, chúng được đưa vào từ điển.Bạn cũng có thể chuyển một mục tiêu của các mục dưới dạng đối số cho hàm tạo của 5:>>>
Trong trường hợp này, trước tiên bạn nhập 5 từ 8. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 5 mà không cung cấp các đối số cho hàm tạo.Bạn có thể thêm các cặp giá trị khóa vào từ điển bằng cách cung cấp một khóa trong ngoặc vuông ( 8) và gán giá trị cho khóa đó. Khi bạn tham khảo 9, bạn sẽ nhận được một cặp có giá trị khóa giữ các mục theo cùng một thứ tự, chúng được đưa vào từ điển.>>>
Trong trường hợp này, trước tiên bạn nhập 5 từ 8. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 5 mà không cung cấp các đối số cho hàm tạo.>>>
Trong trường hợp này, trước tiên bạn nhập 5 từ 8. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 5 mà không cung cấp các đối số cho hàm tạo.Bạn có thể thêm các cặp giá trị khóa vào từ điển bằng cách cung cấp một khóa trong ngoặc vuông ( 8) và gán giá trị cho khóa đó. Khi bạn tham khảo 9, bạn sẽ nhận được một cặp có giá trị khóa giữ các mục theo cùng một thứ tự, chúng được đưa vào từ điển.>>>
Trong trường hợp này, trước tiên bạn nhập 5 từ 8. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 5 mà không cung cấp các đối số cho hàm tạo.Bạn có thể thêm các cặp giá trị khóa vào từ điển bằng cách cung cấp một khóa trong ngoặc vuông ( 8) và gán giá trị cho khóa đó. Khi bạn tham khảo 9, bạn sẽ nhận được một cặp có giá trị khóa giữ các mục theo cùng một thứ tự, chúng được đưa vào từ điển.>>>
Trong trường hợp này, trước tiên bạn nhập 5 từ 8. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 5 mà không cung cấp các đối số cho hàm tạo.Bạn có thể thêm các cặp giá trị khóa vào từ điển bằng cách cung cấp một khóa trong ngoặc vuông (>>> from collections import OrderedDict >>> numbers = OrderedDict(one=1, two=2, three=3) >>> del numbers["one"] >>> numbers OrderedDict([('two', 2), ('three', 3)]) >>> numbers["one"] = 1 >>> numbers OrderedDict([('two', 2), ('three', 3), ('one', 1)]) 8) và gán giá trị cho khóa đó. Khi bạn tham khảo >>> from collections import OrderedDict >>> numbers = OrderedDict(one=1, two=2, three=3) >>> del numbers["one"] >>> numbers OrderedDict([('two', 2), ('three', 3)]) >>> numbers["one"] = 1 >>> numbers OrderedDict([('two', 2), ('three', 3), ('one', 1)]) 9, bạn sẽ nhận được một cặp có giá trị khóa giữ các mục theo cùng một thứ tự, chúng được đưa vào từ điển.Bạn cũng có thể chuyển một mục tiêu của các mục dưới dạng đối số cho hàm tạo của 5:mutating operations on its
instances. You can insert new items, update and remove existing items, and so on. If you insert a new item into an existing ordered dictionary, then the item is added to the end of the dictionary:>>>
Trong trường hợp này, trước tiên bạn nhập 5 từ 8. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 5 mà không cung cấp các đối số cho hàm tạo.Bạn có thể thêm các cặp giá trị khóa vào từ điển bằng cách cung cấp một khóa trong ngoặc vuông ( 8) và gán giá trị cho khóa đó. Khi bạn tham khảo 9, bạn sẽ nhận được một cặp có giá trị khóa giữ các mục theo cùng một thứ tự, chúng được đưa vào từ điển.>>>
Trong trường hợp này, trước tiên bạn nhập 5 từ 8. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 5 mà không cung cấp các đối số cho hàm tạo.Bạn có thể thêm các cặp giá trị khóa vào từ điển bằng cách cung cấp một khóa trong ngoặc vuông ( 8) và gán giá trị cho khóa đó. Khi bạn tham khảo 9, bạn sẽ nhận được một cặp có giá trị khóa giữ các mục theo cùng một thứ tự, chúng được đưa vào từ điển.>>> 0Trong trường hợp này, trước tiên bạn nhập 5 từ 8. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 5 mà không cung cấp các đối số cho hàm tạo.Lặp lại trên một >>> from collections import OrderedDict >>> numbers = OrderedDict([("one", 1), ("two", 2), ("three", 3)]) >>> numbers OrderedDict([('one', 1), ('two', 2), ('three', 3)]) >>> letters = OrderedDict({("a", 1), ("b", 2), ("c", 3)}) >>> letters OrderedDict([('c', 3), ('a', 1), ('b', 2)]) 5Giống như với từ điển thông thường, bạn có thể lặp lại thông qua một đối tượng 5 bằng một số công cụ và kỹ thuật. Bạn có thể lặp lại trực tiếp các khóa hoặc bạn có thể sử dụng các phương thức từ điển, chẳng hạn như 19, 20 và 21:>>> 1Vòng lặp 22 đầu tiên lặp lại các khóa của 9 trực tiếp. Ba vòng khác sử dụng các phương thức từ điển để lặp lại các mục, khóa và giá trị của 9.Lặp lại theo thứ tự đảo ngược với {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12} 25Một tính năng quan trọng khác mà 5 đã cung cấp kể từ Python 3.5 là các vật phẩm, khóa và giá trị của nó hỗ trợ lặp lại bằng cách sử dụng 25. Tính năng này đã được thêm vào từ điển thông thường trong Python 3.8. Vì vậy, nếu mã của bạn sử dụng nó, thì khả năng tương thích ngược của bạn bị hạn chế hơn nhiều với từ điển bình thường.Bạn có thể sử dụng 25 với các mục, khóa và giá trị của đối tượng 5:>>> 2Vòng lặp 22 đầu tiên lặp lại các khóa của 9 trực tiếp. Ba vòng khác sử dụng các phương thức từ điển để lặp lại các mục, khóa và giá trị của 9.Lặp lại theo thứ tự đảo ngược với 25>>> 3Vòng lặp 22 đầu tiên lặp lại các khóa của 9 trực tiếp. Ba vòng khác sử dụng các phương thức từ điển để lặp lại các mục, khóa và giá trị của 9.Lặp lại theo thứ tự đảo ngược với {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12} 25Một tính năng quan trọng khác mà 5 đã cung cấp kể từ Python 3.5 là các vật phẩm, khóa và giá trị của nó hỗ trợ lặp lại bằng cách sử dụng 25. Tính năng này đã được thêm vào từ điển thông thường trong Python 3.8. Vì vậy, nếu mã của bạn sử dụng nó, thì khả năng tương thích ngược của bạn bị hạn chế hơn nhiều với từ điển bình thường.Bạn có thể sử dụng 25 với các mục, khóa và giá trị của đối tượng 5:
Nếu bạn cần lặp lại các mục theo một từ điển theo thứ tự ngược lại, thì 5 là một đồng minh tốt. Sử dụng một từ điển thông thường làm giảm đáng kể khả năng tương thích ngược của bạn vì lặp lại đảo ngược đã được thêm vào từ điển thông thường cho đến khi Python 3.8.Khám phá các tính năng độc đáo của Python từ 5Kể từ Python 3.6, từ điển thông thường đã giữ các mặt hàng của họ theo cùng thứ tự mà chúng được đưa vào từ điển cơ bản. Điều này giới hạn tính hữu ích của >>> from collections import OrderedDict >>> numbers = OrderedDict([("one", 1), ("two", 2), ("three", 3)]) >>> numbers OrderedDict([('one', 1), ('two', 2), ('three', 3)]) >>> letters = OrderedDict({("a", 1), ("b", 2), ("c", 3)}) >>> letters OrderedDict([('c', 3), ('a', 1), ('b', 2)]) 5, như bạn đã thấy cho đến nay. Tuy nhiên, >>> from collections import OrderedDict >>> numbers = OrderedDict([("one", 1), ("two", 2), ("three", 3)]) >>> numbers OrderedDict([('one', 1), ('two', 2), ('three', 3)]) >>> letters = OrderedDict({("a", 1), ("b", 2), ("c", 3)}) >>> letters OrderedDict([('c', 3), ('a', 1), ('b', 2)]) 5 cung cấp một số tính năng độc đáo mà bạn có thể tìm thấy trong một đối tượng >>> from collections import OrderedDict >>> numbers = OrderedDict([("one", 1), ("two", 2), ("three", 3)]) >>> numbers OrderedDict([('one', 1), ('two', 2), ('three', 3)]) >>> letters = OrderedDict({("a", 1), ("b", 2), ("c", 3)}) >>> letters OrderedDict([('c', 3), ('a', 1), ('b', 2)]) 6 thông thường.Với một từ điển được đặt hàng, bạn có quyền truy cập vào các phương pháp bổ sung và nâng cao sau: 3 là một phương pháp mới được thêm vào Python 3.2 cho phép bạn di chuyển một mục hiện có đến cuối hoặc đến đầu từ điển.
Cuối cùng, các trường hợp 5 cung cấp một thuộc tính gọi là 45 mà bạn có thể tìm thấy trong một trường hợp từ điển thông thường. Thuộc tính này cho phép bạn thêm các thuộc tính có thể ghi tùy chỉnh vào một từ điển được đặt hàng hiện có.>>> 4Sắp xếp lại các mặt hàng với 3Một trong những khác biệt đáng chú ý hơn giữa 6 và 5 là phương pháp sau có một phương pháp bổ sung gọi là 3. Phương pháp này cho phép bạn di chuyển các mục hiện có sang phần cuối hoặc bắt đầu từ điển cơ bản, do đó, nó là một công cụ tuyệt vời để sắp xếp lại từ điển.>>> 5Khi bạn sử dụng 3, bạn có thể cung cấp hai đối số:>>> 6 51 giữ khóa xác định mục bạn muốn di chuyển. Nếu 51 không tồn tại, thì bạn sẽ nhận được 53. 54 giữ một giá trị boolean xác định kết thúc của từ điển bạn muốn di chuyển vật phẩm trong tay. Nó mặc định là 55, có nghĩa là vật phẩm sẽ được di chuyển đến cuối hoặc bên phải của từ điển. 56 có nghĩa là vật phẩm sẽ được di chuyển sang phía trước hoặc bên trái của từ điển được đặt hàng.Sắp xếp từ điển sau theo các giá trị: >>> 7Là một gợi ý hữu ích để thực hiện một giải pháp, hãy xem xét sử dụng hàm 69.Bạn có thể mở rộng khối bên dưới để xem một giải pháp khả thi. Bạn có thể sử dụng hàm 69 để truy xuất giá trị của từng cặp giá trị khóa trong 67 và sử dụng hàm đó làm đối số 51 thành 73:>>> 8Là một gợi ý hữu ích để thực hiện một giải pháp, hãy xem xét sử dụng hàm 69.comparison
key from each element of the input iterable, 78. Then you use 3 to sort 67.Bạn có thể mở rộng khối bên dưới để xem một giải pháp khả thi. Bạn có thể sử dụng hàm {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12} 69 để truy xuất giá trị của từng cặp giá trị khóa trong {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12} 67 và sử dụng hàm đó làm đối số {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12} 51 thành {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12} 73:Trong mã này, bạn sử dụng hàm 69 trả về giá trị của từng cặp giá trị khóa trong 67. Cuộc gọi đến 73 sử dụng hàm 69 này để trích xuất một khóa so sánh từ mỗi phần tử của đầu vào có thể điều chỉnh được, 78. Sau đó, bạn sử dụng 3 để sắp xếp 67.>>> 9Là một gợi ý hữu ích để thực hiện một giải pháp, hãy xem xét sử dụng hàm 69.Bạn có thể mở rộng khối bên dưới để xem một giải pháp khả thi. >>> 0Bạn có thể sử dụng hàm 69 để truy xuất giá trị của từng cặp giá trị khóa trong 67 và sử dụng hàm đó làm đối số 51 thành 73:Trong mã này, bạn sử dụng hàm {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12} 69 trả về giá trị của từng cặp giá trị khóa trong {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12} 67. Cuộc gọi đến {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12} 73 sử dụng hàm {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12} 69 này để trích xuất một khóa so sánh từ mỗi phần tử của đầu vào có thể điều chỉnh được, {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12} 78. Sau đó, bạn sử dụng >>> from collections import OrderedDict >>> keys = ["one", "two", "three"] >>> OrderedDict.fromkeys(keys, 0) OrderedDict([('one', 0), ('two', 0), ('three', 0)]) 3 để sắp xếp {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8, 'k': 11, 'j': 10, 'm': 13, 'l': 12} 67.Tuyệt quá! Bây giờ bạn đã biết cách sắp xếp lại các từ điển được đặt hàng của bạn bằng cách sử dụng 3. Bạn đã sẵn sàng để chuyển sang phần tiếp theo.>>> 1Loại bỏ các mặt hàng bằng 4Một tính năng thú vị khác của 5 là phiên bản nâng cao của 4. Theo mặc định, 4 xóa và trả về một mục theo thứ tự LIFO (lần cuối/lần đầu tiên). Nói cách khác, nó loại bỏ các mục từ đầu bên phải của từ điển đã đặt hàng:>>> 2Tại đây, bạn loại bỏ tất cả các mục từ 9 bằng 4. Mỗi cuộc gọi đến phương thức này sẽ loại bỏ một mục từ cuối từ điển cơ bản. Nếu bạn gọi 4 trên một từ điển trống, thì bạn sẽ nhận được 53. Cho đến thời điểm này, 4 hành xử giống như trong từ điển thông thường.Tuy nhiên, trong 5, 4 cũng chấp nhận một đối số boolean gọi là 54, mặc định là 55. Nếu bạn đặt 54 thành 56, thì 4 sẽ xóa các mục theo thứ tự FIFO (đầu tiên/đầu tiên), điều đó có nghĩa là nó sẽ loại bỏ các mục từ đầu từ điển:>>> 3Với 54 được đặt thành 55, bạn có thể sử dụng 4 để xóa và trả lại các mục từ đầu của một từ điển được đặt hàng. Trong ví dụ này, cuộc gọi cuối cùng đến 4 tăng 53 vì từ điển cơ bản đã trống.Kiểm tra sự bình đẳng giữa các từ điểnKhi bạn kiểm tra hai đối tượng 5 cho sự bình đẳng trong bối cảnh Boolean, thứ tự các mục đóng vai trò quan trọng. Ví dụ: nếu từ điển được đặt hàng của bạn chứa cùng một bộ mục, thì kết quả của bài kiểm tra phụ thuộc vào thứ tự của chúng:>>> 4Trong ví dụ này, 04 có sự khác biệt nhỏ theo thứ tự các mục của nó so với 05 và 06, do đó, thử nghiệm đầu tiên trả về 56. Trong thử nghiệm thứ hai, 05 và 06 có cùng một bộ các mục, theo cùng một thứ tự, vì vậy thử nghiệm trả về 55.Nếu bạn thử ví dụ tương tự bằng cách sử dụng từ điển thông thường, thì bạn sẽ nhận được một kết quả khác: Tại đây, khi bạn kiểm tra hai từ điển thông thường cho sự bình đẳng, bạn sẽ nhận được 55 nếu cả hai từ điển đều có cùng một bộ mục. Trong trường hợp này, thứ tự các mặt hàng không thay đổi kết quả cuối cùng.>>> 5Cuối cùng, các bài kiểm tra bình đẳng giữa đối tượng 5 và từ điển thông thường don don đưa thứ tự các mục vào tài khoản:dot notation or by using 26.Khi bạn so sánh các từ điển được đặt hàng với từ điển thông thường, thứ tự của các mặt hàng không quan trọng. Nếu cả hai từ điển đều có cùng một bộ mục, thì chúng đều so sánh như nhau, bất kể thứ tự của các mặt hàng của chúng. >>> 6Nối thêm các thuộc tính mới vào một trường hợp từ điển >>> 7Nếu bạn cố gắng tự động thêm các thuộc tính thể hiện tùy chỉnh vào từ điển thông thường, thì bạn sẽ nhận được một 29 nói với bạn rằng từ điển cơ bản không có thuộc tính nào. Điều đó bởi vì từ điển thông thường don don có thuộc tính 45 để giữ các thuộc tính thể hiện mới.Hợp nhất và cập nhật từ điển với các nhà khai thácPython 3.9 đã thêm hai toán tử mới vào không gian từ điển. Bây giờ bạn có các toán tử từ điển hợp nhất ( 31) và cập nhật ( 32). Các nhà khai thác này cũng làm việc với các trường hợp 5:merge ( 31) and
update ( 32) dictionary operators. These operators also work with 5 instances:>>> 8Như tên của nó cho thấy, toán tử hợp nhất hợp nhất hai từ điển thành một từ mới chứa các mục của cả hai từ điển ban đầu. Nếu các từ điển trong biểu thức có các khóa chung, thì các giá trị từ điển ngoài cùng bên phải sẽ chiếm ưu thế. Nhà điều hành cập nhật rất tiện dụng khi bạn có từ điển và muốn cập nhật một số giá trị của nó mà không cần gọi 16:>>> 9Trong ví dụ này, bạn sử dụng toán tử cập nhật từ điển để cập nhật thông tin trọn đời của Newton. Nhà điều hành cập nhật một từ điển tại chỗ. Nếu từ điển cung cấp dữ liệu cập nhật có các khóa mới, thì các khóa đó được thêm vào cuối từ điển gốc. Xem xét hiệu suấtHiệu suất là một chủ đề quan trọng trong lập trình. Biết được thuật toán chạy nhanh như thế nào hoặc bao nhiêu bộ nhớ mà nó sử dụng là mối quan tâm phổ biến. 5 ban đầu được mã hóa trong Python và sau đó được viết bằng C để tối đa hóa hiệu quả trong các phương pháp và hoạt động của nó. Hai triển khai này hiện có sẵn trong thư viện tiêu chuẩn. Tuy nhiên, việc triển khai Python đóng vai trò thay thế nếu việc triển khai C không có sẵn vì một số lý do.Cả hai triển khai của 5 liên quan đến việc sử dụng danh sách được liên kết gấp đôi để nắm bắt thứ tự của các mục. Mặc dù có thời gian tuyến tính cho một số hoạt động, việc triển khai danh sách được liên kết trong 5 được tối ưu hóa cao để duy trì thời gian nhanh của các phương pháp từ điển tương ứng. Điều đó nói rằng, các hoạt động trên một từ điển được đặt hàng là O (1) nhưng với một yếu tố không đổi lớn hơn so với từ điển thông thường.Nói chung, 5 có hiệu suất thấp hơn từ điển thông thường. Ở đây, một ví dụ đo lường thời gian thực hiện của một số hoạt động trên cả hai lớp từ điển: 0Trong tập lệnh này, bạn tính toán 39 mà cần để chạy một số hoạt động phổ biến trên một từ điển nhất định. Vòng lặp 22 sử dụng 41 để đo thời gian thực hiện của tập hợp các hoạt động. Hàm trả về thời gian trung bình, tính bằng nano giây, cần phải chạy tập hợp các hoạt động đã chọn.Nếu bạn chạy tập lệnh này từ dòng lệnh của mình, thì bạn sẽ nhận được một đầu ra tương tự như thế này: 1Như bạn thấy trong đầu ra, các hoạt động trên các đối tượng 6 nhanh hơn các hoạt động trên các đối tượng 5.Về mức tiêu thụ bộ nhớ, các trường hợp 5 phải trả chi phí lưu trữ vì danh sách các khóa được đặt hàng của họ. Ở đây, một kịch bản cung cấp cho bạn ý tưởng về chi phí bộ nhớ này:>>> 2Trong ví dụ này, bạn sử dụng 45 để đo dấu chân bộ nhớ trong byte của hai đối tượng từ điển. Trong đầu ra, bạn có thể thấy rằng từ điển thông thường chiếm ít bộ nhớ hơn so với đối tác 5 của nó.Chọn từ điển phù hợp cho công việcCho đến nay, bạn đã tìm hiểu về sự khác biệt tinh tế giữa 5 và 6. Bạn đã học được rằng, mặc dù từ điển thông thường đã được đặt hàng các cấu trúc dữ liệu kể từ Python 3.6, nhưng vẫn có một số giá trị trong việc sử dụng 5 vì một tập hợp các tính năng hữu ích có mặt trong 6.Ở đây, một bản tóm tắt về sự khác biệt và tính năng có liên quan hơn của cả hai lớp mà bạn nên xem xét khi bạn quyết định sử dụng cái nào:
Các bài kiểm tra bình đẳng xem xét thứ tự của các mặt hàng Xây dựng hàng đợi dựa trên từ điểnMột trường hợp sử dụng trong đó bạn nên xem xét sử dụng đối tượng 5 thay vì đối tượng 6 là khi bạn cần thực hiện hàng đợi dựa trên từ điển. Hàng đợi là các cấu trúc dữ liệu phổ biến và hữu ích quản lý các mục của họ theo cách FIFO. Điều này có nghĩa là bạn đẩy vào các vật phẩm mới ở cuối hàng đợi, và các mặt hàng cũ bật ra từ đầu hàng đợi.Thông thường, hàng đợi thực hiện một hoạt động để thêm một mục vào cuối của chúng, được gọi là hoạt động enqueue. Hàng đợi cũng thực hiện một hoạt động để loại bỏ các mục từ khi bắt đầu, được gọi là hoạt động dequeue.enqueue operation. Queues also implement an operation to remove items from their beginning, which is known as a dequeue operation. Để tạo hàng đợi dựa trên từ điển, hãy kích hoạt Trình chỉnh sửa mã hoặc IDE của bạn, hãy tạo một mô-đun Python mới có tên là 63 và thêm mã sau vào nó: 3Trong 64, trước tiên bạn khởi tạo một thuộc tính thể hiện được gọi là 65. Thuộc tính này chứa một từ điển được đặt hàng trống mà bạn sẽ sử dụng để lưu trữ dữ liệu. Trình khởi tạo lớp có một đối số tùy chọn đầu tiên, 66, cho phép bạn cung cấp dữ liệu ban đầu khi bạn khởi tạo lớp. Bộ khởi tạo cũng có các đối số từ khóa tùy chọn ( 67) để cho phép bạn sử dụng các đối số từ khóa trong hàm tạo.Sau đó, bạn mã 68, cho phép bạn thêm các cặp giá trị khóa vào hàng đợi. Trong trường hợp này, bạn sử dụng 3 nếu khóa đã tồn tại và bạn sử dụng một bài tập bình thường cho các khóa mới. Lưu ý rằng để phương pháp này hoạt động, bạn cần cung cấp một 02 hoặc 01 hai mục với một cặp giá trị khóa hợp lệ.Việc triển khai 72 sử dụng 4 với 54 được đặt thành 56 để xóa và trả lại các mục từ đầu từ điển được đặt hàng cơ bản, 65. Trong trường hợp này, bạn sử dụng khối 77 ____ ____278 để xử lý 53 xảy ra khi bạn gọi 4 trên một từ điển trống.Phương pháp đặc biệt 81 cung cấp chức năng cần thiết để truy xuất độ dài của từ điển được đặt hàng nội bộ, 65. Cuối cùng, phương pháp đặc biệt 83 cung cấp biểu diễn chuỗi thân thiện với người dùng của hàng đợi khi bạn in cấu trúc dữ liệu lên màn hình.string representation of the queue when you print the data structure to the screen.
Dưới đây là một số ví dụ về cách bạn có thể sử dụng 64:>>> 4Trong ví dụ mã này, trước tiên bạn tạo ba đối tượng 64 khác nhau bằng cách sử dụng các phương pháp khác nhau. Sau đó, bạn sử dụng 68 để thêm một mục duy nhất vào cuối 87. Cuối cùng, bạn gọi 72 nhiều lần để xóa tất cả các mục trong 87. Lưu ý rằng cuộc gọi cuối cùng đến 72 in một thông báo lên màn hình để thông báo cho bạn rằng hàng đợi đã trống.Sự kết luậnTrong nhiều năm, từ điển Python là cấu trúc dữ liệu không đặt hàng. Điều này cho thấy sự cần thiết của một từ điển được đặt hàng giúp trong các tình huống trong đó thứ tự của các mặt hàng là quan trọng. Vì vậy, các nhà phát triển Python đã tạo ra 5, được thiết kế đặc biệt để giữ cho các mặt hàng của nó được đặt hàng.order of items is important. So Python developers created
5, which was specially designed to keep its items ordered.Python 3.6 đã giới thiệu một tính năng mới vào từ điển thông thường. Bây giờ họ cũng nhớ thứ tự của các mặt hàng. Với sự bổ sung này, hầu hết các lập trình viên Python tự hỏi liệu họ có cần xem xét sử dụng 5 không.Trong hướng dẫn này, bạn đã học được:
Bây giờ, bạn có thể ở một vị trí tốt hơn để đưa ra quyết định có giáo dục về việc sử dụng 6 hay 5 nếu mã của bạn cần một từ điển được đặt hàng.Trong hướng dẫn này, bạn đã mã hóa một ví dụ về cách thực hiện hàng đợi dựa trên từ điển, đây là trường hợp sử dụng cho thấy 5 vẫn có thể có giá trị trong các cuộc phiêu lưu mã hóa Python hàng ngày của bạn.Là một từ điển luôn luôn theo thứ tự Python?Kể từ Python 3.6, đối với việc triển khai Python Cpython, từ điển hãy nhớ thứ tự của các mục được chèn vào. Đây được coi là một chi tiết thực hiện trong Python 3.6; Bạn cần sử dụng OrderEddict nếu bạn muốn đặt hàng chèn được đảm bảo trong các triển khai khác của Python (và hành vi được đặt hàng khác).dictionaries remember the order of items inserted. This is considered an implementation detail in Python 3.6; you need to use OrderedDict if you want insertion ordering that's guaranteed across other implementations of Python (and other ordered behavior).
Làm thế nào để bạn sắp xếp lại một từ điển trong Python?Để sắp xếp từ điển theo giá trị trong Python, bạn có thể sử dụng hàm Sắp xếp ().Hàm Sắp xếp () 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.Sắp xếp () lấy 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 theo thứ tự.use the sorted() function. Python's sorted() function can be used to sort dictionaries by key, which allows for a custom sorting method. sorted() takes three arguments: object, key, and reverse. Dictionaries are unordered data structures.
Từ điển có được tự động sắp xếp trong Python không?Nó không phải là sắp xếp.Dict không được đặt hàng, vì vậy bạn không thể ảnh hưởng đến thứ tự chính theo bất kỳ cách nào.. dict is not ordered at all, so you cannot influence the key order in any way.
Dict có giữ trật tự không?Từ điển sẽ sử dụng một thứ tự giúp tìm kiếm hiệu quả và bạn không thể thay đổi điều đó, bạn chỉ có thể sử dụng danh sách các đối tượng (một phần tử 2 trong một trường hợp đơn giản hoặc thậm chí là một lớp) và nối các mục vào cuối. that makes searching efficient, and you cant change that, You could just use a list of objects (a 2 element tuple in a simple case, or even a class), and append items to the end. |