Từ Python 3.6 trở đi, dict
loại tiêu chuẩn duy trì thứ tự chèn theo mặc định.
Xác định
d = {'ac':33, 'gw':20, 'ap':102, 'za':321, 'bs':10}
sẽ dẫn đến một từ điển với các khóa theo thứ tự được liệt kê trong mã nguồn.
Điều này đạt được bằng cách sử dụng một mảng đơn giản với các số nguyên cho bảng băm thưa thớt, trong đó các số nguyên đó lập chỉ mục vào một mảng khác lưu trữ các cặp khóa-giá trị (cộng với hàm băm được tính toán). Mảng sau đó chỉ xảy ra để lưu trữ các mục theo thứ tự chèn và toàn bộ kết hợp thực sự sử dụng ít bộ nhớ hơn so với triển khai được sử dụng trong Python 3.5 và trước đó. Xem bài viết ý tưởng ban đầu của Raymond Hettinger để biết chi tiết.
Trong 3.6 điều này vẫn được coi là một chi tiết thực hiện; xem tài liệu Có gì mới trong Python 3.6 :
Khía cạnh giữ trật tự của triển khai mới này được coi là một chi tiết triển khai và không nên dựa vào (điều này có thể thay đổi trong tương lai, nhưng mong muốn có triển khai chính tả mới này trong ngôn ngữ cho một vài bản phát hành trước khi thay đổi thông số ngôn ngữ để bắt buộc ngữ nghĩa duy trì trật tự cho tất cả các triển khai Python hiện tại và tương lai, điều này cũng giúp duy trì khả năng tương thích ngược với các phiên bản cũ hơn của ngôn ngữ trong đó thứ tự lặp ngẫu nhiên vẫn còn hiệu lực, ví dụ Python 3.5).
Python 3.7 nâng chi tiết triển khai này thành một đặc tả ngôn ngữ , do đó, bắt buộc phải dict
giữ trật tự trong tất cả các cài đặt Python tương thích với phiên bản đó hoặc mới hơn. Xem phần phát âm của BDFL .
Bạn vẫn có thể muốn sử dụng collections.OrderedDict()
lớp trong một số trường hợp nhất định, vì nó cung cấp một số chức năng bổ sung trên đầu trang của dict
loại tiêu chuẩn . Chẳng hạn như có thể đảo ngược (điều này mở rộng cho các đối tượng xem ) và hỗ trợ sắp xếp lại (thông qua move_to_end()
phương thức ).