Hướng dẫn ordereddict vs dict python - Orderdict so với dict python
Đô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ừ 3. 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. Show
Điều này đã thay đổi trong Python 3.6. Lớp 4 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 3 có hữu ích không. Nhìn kỹ hơn 3 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 3, sẽ khó khăn hơn nếu bạn sử dụng đối tượng 4 thông thường.Lựa chọn giữa Python 3.5.10 (default, Jan 25 2021, 13:22:52) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from collections import OrderedDict >>> numbers = OrderedDict({"one": 1, "two": 2, "three": 3}) >>> numbers OrderedDict([('one', 1), ('three', 3), ('two', 2)]) 3 và Python 3.5.10 (default, Jan 25 2021, 13:22:52) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from collections import OrderedDict >>> numbers = OrderedDict({"one": 1, "two": 2, "three": 3}) >>> numbers OrderedDict([('one', 1), ('three', 3), ('two', 2)]) 4Trong 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 6. 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 3.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. 3 đã đượ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ư 4. Tuy nhiên, 3 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 4. 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 4 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 3, 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 4 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 4 đã đượ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 4 khi họ cần một từ điển giữ cho các mục của nó được đặt hàng.Tại thời điểm này, một câu hỏi đặt ra: 3 vẫn cần thiết sau khi triển khai 4 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 3 vẫn làm cho nó có giá trị và khác với 4 thông thường:
Có ít nhất một lý do nữa để tiếp tục sử dụng 3 trong mã của bạn: khả năng tương thích ngược. Dựa vào các đối tượng 4 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 4 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 4 sẽ sớm thay thế 3. Ngày nay, 3 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ừ Python 3.5.10 (default, Jan 25 2021, 13:22:52) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from collections import OrderedDict >>> numbers = OrderedDict({"one": 1, "two": 2, "three": 3}) >>> numbers OrderedDict([('one', 1), ('three', 3), ('two', 2)]) 3Python sườn 3 là một lớp con 4 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 3, 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 3 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 4 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. 3 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 3 trong mã của bạn.Tạo đối tượng Python 3.5.10 (default, Jan 25 2021, 13:22:52) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from collections import OrderedDict >>> numbers = OrderedDict({"one": 1, "two": 2, "three": 3}) >>> numbers OrderedDict([('one', 1), ('three', 3), ('two', 2)]) 3Không giống như 4, 3 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 3 là nhập lớp từ 6. 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 4 thông thường. Ví dụ: bạn có thể tạo một đối tượng 3 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 3 từ 6. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 3 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 dấu ngoặc vuông ( 6) và gán giá trị cho khóa đó. Khi bạn tham khảo 7, 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 3:>>>
Trong trường hợp này, trước tiên bạn nhập 3 từ 6. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 3 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 dấu ngoặc vuông ( 6) và gán giá trị cho khóa đó. Khi bạn tham khảo 7, 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 3 từ 6. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 3 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 3 từ 6. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 3 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 dấu ngoặc vuông ( 6) và gán giá trị cho khóa đó. Khi bạn tham khảo 7, 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 3 từ 6. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 3 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 dấu ngoặc vuông ( 6) và gán giá trị cho khóa đó. Khi bạn tham khảo 7, 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 3 từ 6. Sau đó, bạn tạo một từ điển được đặt hàng trống bằng cách khởi tạo 3 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 dấu ngoặc vuông (>>> from collections import OrderedDict >>> numbers = OrderedDict(one=1, two=2, three=3) >>> # Iterate over the keys directly >>> for key in numbers: ... print(key, "->", numbers[key]) ... one -> 1 two -> 2 three -> 3 >>> # Iterate over the items using .items() >>> for key, value in numbers.items(): ... print(key, "->", value) ... one -> 1 two -> 2 three -> 3 >>> # Iterate over the keys using .keys() >>> for key in numbers.keys(): ... print(key, "->", numbers[key]) ... one -> 1 two -> 2 three -> 3 >>> # Iterate over the values using .values() >>> for value in numbers.values(): ... print(value) ... 1 2 3 6) 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) >>> # Iterate over the keys directly >>> for key in numbers: ... print(key, "->", numbers[key]) ... one -> 1 two -> 2 three -> 3 >>> # Iterate over the items using .items() >>> for key, value in numbers.items(): ... print(key, "->", value) ... one -> 1 two -> 2 three -> 3 >>> # Iterate over the keys using .keys() >>> for key in numbers.keys(): ... print(key, "->", numbers[key]) ... one -> 1 two -> 2 three -> 3 >>> # Iterate over the values using .values() >>> for value in numbers.values(): ... print(value) ... 1 2 3 7, 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 3: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:>>>
Mục mới được thêm vào, 11, được đặt ở cuối từ điển cơ bản, do đó, thứ tự của các mục hiện tại vẫn không bị ảnh hưởng và từ điển giữ thứ tự chèn.Nếu bạn xóa một mục khỏi một từ điển được đặt hàng hiện có và chèn lại cùng một mục, thì phiên bản mới của mục được đặt ở cuối từ điển: >>>
Nếu bạn xóa mục 12 và chèn một thể hiện mới của cùng một mục, thì mục mới sẽ được thêm vào cuối từ điển cơ bản.Nếu bạn chỉ định hoặc cập nhật giá trị của một cặp giá trị khóa hiện có trong một đối tượng 3, thì khóa duy trì vị trí của nó nhưng nhận được một giá trị mới:>>>
Nếu bạn cập nhật giá trị của một khóa đã cho trong từ điển được đặt hàng, thì khóa không được di chuyển nhưng được gán giá trị mới tại chỗ. Theo cách tương tự, nếu bạn sử dụng 14 để sửa đổi giá trị của một cặp giá trị khóa hiện có, thì từ điển sẽ nhớ vị trí của khóa và gán giá trị cập nhật cho nó.Lặp lại trên Python 3.5.10 (default, Jan 25 2021, 13:22:52) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from collections import OrderedDict >>> numbers = OrderedDict({"one": 1, "two": 2, "three": 3}) >>> numbers OrderedDict([('one', 1), ('three', 3), ('two', 2)]) 3Giố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 3 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ư 17, 18 và 19:>>>
Vòng lặp 20 đầu tiên lặp lại trên các khóa của 7 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 7.Lặp lại theo thứ tự đảo ngược với >>> 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)]) 23Một tính năng quan trọng khác mà 3 đã cung cấp kể từ Python 3.5 là các mục, khóa và giá trị của nó hỗ trợ lặp lại lặp lại bằng cách sử dụng 23. 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 23 với các mục, khóa và giá trị của đối tượng 3:>>> 0Mỗi vòng lặp trong ví dụ này sử dụng 23 để lặp lại thông qua các yếu tố khác nhau của từ điển được đặt hàng theo thứ tự ngược lại.Từ điển thường xuyên cũng hỗ trợ lặp lại. Tuy nhiên, nếu bạn cố gắng sử dụng 23 với đối tượng 4 thông thường trong phiên bản Python thấp hơn 3,8, thì bạn sẽ nhận được 31:>>> 1Nế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ì 3 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ừ Python 3.5.10 (default, Jan 25 2021, 13:22:52) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from collections import OrderedDict >>> numbers = OrderedDict({"one": 1, "two": 2, "three": 3}) >>> numbers OrderedDict([('one', 1), ('three', 3), ('two', 2)]) 3Kể 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 3, như bạn đã thấy cho đến nay. Tuy nhiên, 3 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 4 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 và 4 cũng hoạt động khác nhau khi họ thử nghiệm về sự bình đẳng. Cụ thể, khi bạn so sánh từ điển được đặt hàng, thứ tự của các mục có vấn đề. Đó không phải là trường hợp với từ điển thông thường.Cuối cùng, các trường hợp 3 cung cấp một thuộc tính gọi là 43 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ó.Sắp xếp lại các mục với >>> 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)]) 1Một trong những khác biệt đáng chú ý hơn giữa 4 và 3 là phương pháp sau có một phương pháp bổ sung gọi là 1. 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.
Khi bạn sử dụng 1, bạn có thể cung cấp hai đối số:
Ở đây, một ví dụ về cách sử dụng 1 với đối số 49 và dựa vào giá trị mặc định là 52:>>> 2Khi bạn gọi 1 với 49 làm đối số, bạn sẽ di chuyển cặp giá trị khóa trong tay đến cuối từ điển. Đó là lý do tại sao 12 ở vị trí cuối cùng. Lưu ý rằng phần còn lại của các mục vẫn theo cùng một thứ tự ban đầu.Nếu bạn chuyển 54 đến 52, thì bạn sẽ chuyển vật phẩm sang đầu:>>> 3Khi bạn gọi 1 với 49 làm đối số, bạn sẽ di chuyển cặp giá trị khóa trong tay đến cuối từ điển. Đó là lý do tại sao 12 ở vị trí cuối cùng. Lưu ý rằng phần còn lại của các mục vẫn theo cùng một thứ tự ban đầu.>>> 4Khi bạn gọi 1 với 49 làm đối số, bạn sẽ di chuyển cặp giá trị khóa trong tay đến cuối từ điển. Đó là lý do tại sao 12 ở vị trí cuối cùng. Lưu ý rằng phần còn lại của các mục vẫn theo cùng một thứ tự ban đầu.Nếu bạn chuyển 54 đến 52, thì bạn sẽ chuyển vật phẩm sang đầu:Trong trường hợp này, bạn di chuyển 12 sang đầu từ điển. Điều này cung cấp một tính năng thú vị và mạnh mẽ. Ví dụ: với 1, bạn có thể sắp xếp một từ điển được đặt hàng theo các khóa:>>> 5Khi bạn gọi 1 với 49 làm đối số, bạn sẽ di chuyển cặp giá trị khóa trong tay đến cuối từ điển. Đó là lý do tại sao 12 ở vị trí cuối cùng. Lưu ý rằng phần còn lại của các mục vẫn theo cùng một thứ tự ban đầu.Nếu bạn chuyển 54 đến 52, thì bạn sẽ chuyển vật phẩm sang đầu:
Trong trường hợp này, bạn di chuyển 12 sang đầu từ điển. Điều này cung cấp một tính năng thú vị và mạnh mẽ. Ví dụ: với 1, bạn có thể sắp xếp một từ điển được đặt hàng theo các khóa:>>> 6Trong ví dụ này, trước tiên bạn tạo một từ điển được đặt hàng, 65. Vòng lặp 20 lặp lại các phím được sắp xếp của nó và di chuyển mọi mục đến cuối từ điển. Khi vòng lặp kết thúc, từ điển được đặt hàng của bạn có các mục được sắp xếp theo phím.comparison
key from each element of the input iterable, 76. Then you use 1 to sort 65.Sắp xếp từ điển theo các giá trị sẽ là một bài tập thú vị, vì vậy hãy mở rộng khối bên dưới và thử! Sắp xếp từ điển sau theo các giá trị:Là 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 67.>>> 7Bạ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 67 để truy xuất giá trị của từng cặp giá trị khóa trong 65 và sử dụng hàm đó làm đối số 49 thành 71:>>> 8Trong mã này, bạn sử dụng hàm 67 trả về giá trị của từng cặp giá trị khóa trong 65. Cuộc gọi đến 71 sử dụng hàm 67 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, 76. Sau đó, bạn sử dụng 1 để sắp xếp 65.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 >>> 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)]) 1. Bạn đã sẵn sàng để chuyển sang phần tiếp theo.Loại bỏ các mục bằng 2>>> 9Một tính năng thú vị khác của 3 là phiên bản nâng cao của 2. Theo mặc định, 2 sẽ 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:Tại đây, bạn loại bỏ tất cả các mục khỏi 7 bằng 2. 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 2 trên một từ điển trống, thì bạn sẽ nhận được 51. Cho đến thời điểm này, 2 hành xử giống như trong từ điển thông thường.>>> 0Tuy nhiên, trong 3, 2 cũng chấp nhận một đối số boolean gọi là 52, mặc định là 53. Nếu bạn đặt 52 thành 54, thì 2 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:Với 52 được đặt thành 53, bạn có thể sử dụng 2 để 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 2 tăng 51 vì từ điển cơ bản đã trống.>>> 1Kiểm tra sự bình đẳng giữa các từ điển Khi bạn kiểm tra hai đối tượng Python 3.5.10 (default, Jan 25 2021, 13:22:52) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from collections import OrderedDict >>> numbers = OrderedDict({"one": 1, "two": 2, "three": 3}) >>> numbers OrderedDict([('one', 1), ('three', 3), ('two', 2)]) 3 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:Trong ví dụ này, 02 có một chút khác biệt trong thứ tự các mục của nó so với 03 và 04, do đó, thử nghiệm đầu tiên trả về 54. Trong thử nghiệm thứ hai, 03 và 04 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ề 53.>>> 2Nế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: Bạn có thể sử dụng thuộc tính từ điển theo thứ tự 43 để lưu trữ các thuộc tính thể hiện có thể ghi được tạo động. Có nhiều hướng khác nhau để làm điều đó. Ví dụ: bạn có thể sử dụng một bài tập theo kiểu từ điển, như trong 17. Bạn cũng có thể sử dụng ký hiệu dấu chấm, như trong 18.Ở đây, một ví dụ về việc sử dụng 43 để đính kèm một hàm mới vào từ điển đã đặt hàng hiện có:>>> 3Bây giờ bạn có chức năng 20 67 được đính kèm với từ điển được đặt hàng 65 của bạn. Lưu ý rằng bạn có thể kiểm tra nội dung của 43 bằng cách truy cập trực tiếp với ký hiệu dấu chấm hoặc bằng cách sử dụng 24.dot notation or by using 24.Bạn có thể sử dụng chức năng được thêm động này để lặp lại thông qua các khóa từ điển theo thứ tự được sắp xếp mà không thay đổi thứ tự ban đầu trong 65:>>> 4Bây giờ bạn có chức năng 20 67 được đính kèm với từ điển được đặt hàng 65 của bạn. Lưu ý rằng bạn có thể kiểm tra nội dung của 43 bằng cách truy cập trực tiếp với ký hiệu dấu chấm hoặc bằng cách sử dụng 24.>>> 5Bây giờ bạn có chức năng 20 67 được đính kèm với từ điển được đặt hàng 65 của bạn. Lưu ý rằng bạn có thể kiểm tra nội dung của 43 bằng cách truy cập trực tiếp với ký hiệu dấu chấm hoặc bằng cách sử dụng 24.Bạn có thể sử dụng chức năng được thêm động này để lặp lại thông qua các khóa từ điển theo thứ tự được sắp xếp mà không thay đổi thứ tự ban đầu trong >>> 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)]) 65:Đây chỉ là một ví dụ về mức độ hữu ích của tính năng này của 3. Lưu ý rằng bạn có thể làm một cái gì đó tương tự với một từ điển thông thường:merge ( 29) and
update ( 30) dictionary operators. These operators also work with 3 instances:>>> 6Bây giờ bạn có chức năng 20 67 được đính kèm với từ điển được đặt hàng 65 của bạn. Lưu ý rằng bạn có thể kiểm tra nội dung của 43 bằng cách truy cập trực tiếp với ký hiệu dấu chấm hoặc bằng cách sử dụng 24.Bạn có thể sử dụng chức năng được thêm động này để lặp lại thông qua các khóa từ điển theo thứ tự được sắp xếp mà không thay đổi thứ tự ban đầu trong 65:>>> 7Bây giờ bạn có chức năng 20 67 được đính kèm với từ điển được đặt hàng 65 của bạn. Lưu ý rằng bạn có thể kiểm tra nội dung của 43 bằng cách truy cập trực tiếp với ký hiệu dấu chấm hoặc bằng cách sử dụng 24.Bạn có thể sử dụng chức năng được thêm động này để lặp lại thông qua các khóa từ điển theo thứ tự được sắp xếp mà không thay đổi thứ tự ban đầu trong >>> 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)]) 65:Đây chỉ là một ví dụ về mức độ hữu ích của tính năng này của 3. Lưu ý rằng bạn có thể làm một cái gì đó tương tự với một từ điển thông thường:Nế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 27 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 43 để 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ác 8Python 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 ( 29) và cập nhật (____230). Các nhà khai thác này cũng làm việc với các trường hợp 3:Như 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ế. 9Nhà đ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 14:Trong 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. >>> 0Xem xét hiệu suất Hiệ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. Python 3.5.10 (default, Jan 25 2021, 13:22:52) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from collections import OrderedDict >>> numbers = OrderedDict({"one": 1, "two": 2, "three": 3}) >>> numbers OrderedDict([('one', 1), ('three', 3), ('two', 2)]) 3 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 3 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 3 đượ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, 3 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:
Các bài kiểm tra bình đẳng xem xét thứ tự của các mặt hàng ĐúngKhông Hỗ trợ lặp lạienqueue operation. Queues also implement an operation to remove items from their beginning, which is known as a dequeue operation. Có (kể từ Python 3.5) 1Có (kể từ Python 3.8) Khả năng nối các thuộc tính thể hiện mới Có ( 43 thuộc tính)Hỗ trợ cho các toán tử từ điển hợp nhất ( 29) và Update ( 30)string representation of the queue when you print the data structure to the screen.
Có (kể từ Python 3.9) Bảng này tóm tắt một số khác biệt chính giữa 2Xây dựng hàng đợi dựa trên từ điển Một trường hợp sử dụng trong đó bạn nên xem xét sử dụng đối tượng Python 3.5.10 (default, Jan 25 2021, 13:22:52) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from collections import OrderedDict >>> numbers = OrderedDict({"one": 1, "two": 2, "three": 3}) >>> numbers OrderedDict([('one', 1), ('three', 3), ('two', 2)]) 3 thay vì đối tượng Python 3.5.10 (default, Jan 25 2021, 13:22:52) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from collections import OrderedDict >>> numbers = OrderedDict({"one": 1, "two": 2, "three": 3}) >>> numbers OrderedDict([('one', 1), ('three', 3), ('two', 2)]) 4 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ừ đầu của chúng, được gọi là hoạt động dequeue.order of items is important. So Python developers created 3, which was specially designed to keep its items ordered.Để 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 61 và thêm mã sau vào nó:Trong
Dưới đây là một số ví dụ về cách bạn có thể sử dụng 62:>>> |