OrderedDict được triển khai như thế nào trong Python
PEP này đề xuất một từ điển có thứ tự làm cấu trúc dữ liệu mới cho mô-đun Show Một Py3 đang hoạt động. 1 bản vá bao gồm các bài kiểm tra và tài liệu có tại
Việc đăng ký đã được sửa đổi. 70101 và 70102 Trong các phiên bản Python hiện tại, loại dict tích hợp được sử dụng rộng rãi không chỉ định thứ tự cho các cặp khóa/giá trị được lưu trữ. Điều này gây khó khăn cho việc sử dụng từ điển làm nơi lưu trữ dữ liệu cho một số trường hợp sử dụng cụ thể Một số ngôn ngữ lập trình động như PHP và Ruby 1. 9 đảm bảo một thứ tự nhất định trên lần lặp. Trong các ngôn ngữ đó và các triển khai chính tả theo thứ tự Python hiện có, thứ tự của các mục được xác định theo thời điểm chèn khóa. Các phím mới được thêm vào cuối, nhưng các phím bị ghi đè sẽ không được di chuyển đến cuối Ví dụ sau đây cho thấy hành vi đối với các nhiệm vụ đơn giản >>> d = OrderedDict() >>> d['parrot'] = 'dead' >>> d['penguin'] = 'exploded' >>> d.items() [('parrot', 'dead'), ('penguin', 'exploded')] Việc thứ tự được giữ nguyên làm cho OrderedDict trở nên hữu ích trong một số trường hợp
API dict được đặt hàng hầu hết sẽ tương thích với dict và các dict được đặt hàng hiện có. Ghi chú. PEP này đề cập đến 2. 7 và 3. 0 API từ điển như được mô tả trong bộ sưu tập. Ánh xạ lớp cơ sở trừu tượng Hàm tạo và >>> d = OrderedDict([('a', 'b'), ('c', 'd')]) >>> d.update({'foo': 'bar'}) >>> d collections.OrderedDict([('a', 'b'), ('c', 'd'), ('foo', 'bar')])1 đều chấp nhận các lần lặp của bộ dữ liệu cũng như ánh xạ giống như một lệnh. Không giống như một từ điển thông thường, thứ tự chèn được giữ nguyên >>> d = OrderedDict([('a', 'b'), ('c', 'd')]) >>> d.update({'foo': 'bar'}) >>> d collections.OrderedDict([('a', 'b'), ('c', 'd'), ('foo', 'bar')]) Nếu các ký tự có thứ tự được cập nhật từ các ký tự thông thường, tất nhiên thứ tự của các khóa mới là không xác định Có thể bạn quan tâmTất cả các phương thức lặp cũng như >>> d = OrderedDict([('a', 'b'), ('c', 'd')]) >>> d.update({'foo': 'bar'}) >>> d collections.OrderedDict([('a', 'b'), ('c', 'd'), ('foo', 'bar')])2, >>> d = OrderedDict([('a', 'b'), ('c', 'd')]) >>> d.update({'foo': 'bar'}) >>> d collections.OrderedDict([('a', 'b'), ('c', 'd'), ('foo', 'bar')])3 và >>> d = OrderedDict([('a', 'b'), ('c', 'd')]) >>> d.update({'foo': 'bar'}) >>> d collections.OrderedDict([('a', 'b'), ('c', 'd'), ('foo', 'bar')])4 trả về các giá trị được sắp xếp theo thời điểm khóa được chèn lần đầu tiên >>> d['spam'] = 'eggs' >>> d.keys() ['a', 'c', 'foo', 'spam'] >>> d.values() ['b', 'd', 'bar', 'eggs'] >>> d.items() [('a', 'b'), ('c', 'd'), ('foo', 'bar'), ('spam', 'eggs')] Phương pháp mới không có sẵn trên dict >>> d = OrderedDict([('a', 'b'), ('c', 'd')]) >>> d.update({'foo': 'bar'}) >>> d collections.OrderedDict([('a', 'b'), ('c', 'd'), ('foo', 'bar')])5Hỗ trợ lặp ngược bằng phím Điều gì xảy ra nếu một khóa hiện có được gán lại?
Điều gì xảy ra nếu các phím xuất hiện nhiều lần trong danh sách được chuyển đến hàm tạo?
Lệnh dict có phải là lớp con dict không?
Có bất kỳ hạn chế phát sinh từ phân lớp dict?
>>> d['spam'] = 'eggs' >>> d.keys() ['a', 'c', 'foo', 'spam'] >>> d.values() ['b', 'd', 'bar', 'eggs'] >>> d.items() [('a', 'b'), ('c', 'd'), ('foo', 'bar'), ('spam', 'eggs')]0 có trả về một cặp khóa/giá trị cụ thể không?
OrderedDict có hỗ trợ lập chỉ mục, cắt và không?
OrderedDict có hỗ trợ các thứ tự sắp xếp thay thế như theo thứ tự bảng chữ cái không?
OrderedDict hoạt động tốt như thế nào với mô-đun json, PyYAML và ConfigParser?
OrderedDict xử lý kiểm tra bình đẳng như thế nào?
Định dạng __repr__ sẽ duy trì trật tự như thế nào trong chuyến đi khứ hồi repr/eval?
Sự đánh đổi của các cấu trúc dữ liệu cơ bản có thể là gì?
Việc thực hiện với các bài kiểm tra và tài liệu là tại
Phiên bản đề xuất có một số giá trị
Các triển khai khác của lệnh được đặt hàng trong các dự án Python hoặc thư viện độc lập khác nhau, đã truyền cảm hứng cho API được đề xuất ở đây, là
Với sự sẵn có của một lệnh được đặt hàng trong thư viện tiêu chuẩn, các thư viện khác có thể tận dụng lợi thế đó. Ví dụ: ElementTree có thể trả về các odict trong tương lai giữ nguyên thứ tự thuộc tính của tệp nguồn Python triển khai OrderedDict như thế nào?Triển khai từ điển có thứ tự
. Lớp lưu trữ các cặp (khóa, giá trị) trong một mảng và cũng duy trì một lệnh để tra cứu nhanh các khóa. Mảng phục vụ để lưu trữ thứ tự các mục được chèn vào. It starts with an inner class for representing a key-value pair. The class stores the (key, value) pairs in an array, and also maintains a dict for fast lookup of the keys. The array serves to store the order in which the items were inserted.
Phương thức dict được sắp xếp trong Python là gì?OrderedDict là một lệnh ghi nhớ thứ tự các phím được chèn lần đầu tiên . Nếu một mục mới ghi đè lên một mục hiện có, vị trí chèn ban đầu sẽ không thay đổi. Xóa một mục nhập và chèn lại nó sẽ di chuyển nó đến cuối.
dict được triển khai như thế nào?Từ điển Python được triển khai dưới dạng bảng băm . Bảng băm phải cho phép xung đột băm i. e. ngay cả khi hai khóa riêng biệt có cùng giá trị băm, thì việc triển khai bảng phải có chiến lược để chèn và truy xuất các cặp khóa và giá trị một cách rõ ràng.
Sự khác biệt giữa dict và OrderedDict trong Python là gì?Sự khác biệt duy nhất giữa dict() và OrderedDict() là. OrderedDict giữ nguyên thứ tự chèn khóa . Một dict thông thường không theo dõi thứ tự chèn và việc lặp lại nó sẽ cung cấp các giá trị theo thứ tự tùy ý. Ngược lại, thứ tự các mục được chèn vào được ghi nhớ bởi OrderedDict. |