Từ điển trong Python có được đặt hàng hay không?
Các đối tượng `dict` của Python hiện duy trì thứ tự chèn trong triển khai CPython tham chiếu — nhưng việc dựa vào thuộc tính đó rất rủi ro Show Cho đến gần đây, từ điển Python không giữ nguyên thứ tự các mục được thêm vào chúng. Chẳng hạn, bạn có thể gõ 4 và nhận lại 5. Nếu bạn muốn một từ điển giữ nguyên trật tự, bạn có thể sử dụng lớp 6 trong mô-đun thư viện tiêu chuẩn 7Tuy nhiên, tình trạng này đang thay đổi. Các đối tượng 8 tiêu chuẩn bảo toàn thứ tự trong triển khai tham chiếu (CPython) của Python 3. 5 và 3. 6 và thuộc tính giữ nguyên thứ tự này đang trở thành một tính năng ngôn ngữ trong Python 3. 7Bạn có thể nghĩ rằng sự thay đổi này khiến lớp 6 trở nên lỗi thời. Tuy nhiên, có ít nhất hai lý do chính đáng để tiếp tục sử dụng 6. Đầu tiên, việc dựa vào các đối tượng 8 tiêu chuẩn để duy trì trật tự sẽ khiến mã của bạn bị hỏng trên các phiên bản CPython sớm hơn 3. 5 và trên một số triển khai thay thế của Python 3. 5 và 3. 6. Thứ hai, việc sử dụng 6 truyền đạt ý định của bạn dựa trên thứ tự các mục trong từ điển của bạn được bảo tồn, cho cả người đọc mã của bạn và thư viện bên thứ ba mà bạn gọi trong đóTrên thực tế, một số công cụ được sử dụng rộng rãi trong khoa học dữ liệu giả định rằng thứ tự của các mục trong 8 là không đáng kểIPython giả định rằng thứ tự 8 không thành vấn đềXem xét ví dụ này phiên 5
Ở đây có vẻ như 6 trên thực tế không duy trì trật tự một cách nhất quán. Tuy nhiên, điều đang thực sự xảy ra là nhân 5 sắp xếp các khóa từ điển để hiển thị khi từ điển được đánh giá. Nó giả định rằng thứ tự của các mục trong một đối tượng 8 là không đáng kể. Ngược lại, nó không sắp xếp các phím trong một 6
(Phần liên quan của mã 5 nằm trong hàm _dict_pprinter_factory của nó. )Gấu trúc cho rằng thứ tự ________ 18 không thành vấn đềCập nhật. 2 (phát hành ngày 15 tháng 5 năm 2018) tôn trọng thứ tự khi khởi tạo một 3 hoặc một 4 với một 8 trong Python 3. 6+ 6 cũng giả định rằng thứ tự của các mục trong một đối tượng 8 là không đáng kể. Nếu bạn khởi tạo một 3 với một 8, nó sẽ sắp xếp các mục theo khóa
Nó không sắp xếp các cột nếu bạn sử dụng một 6 2(Đoạn liên quan của mã 6 nằm trong phương thức _init_dict của lớp DataFrame. )Việc thêm đảm bảo có thể nguy hiểm như thế nàoNhững ví dụ này minh họa một hiện tượng đáng ngạc nhiên. thêm một đảm bảo có thể nguy hiểm. Người dùng không thể dựa vào sự đảm bảo đó cho đến khi sự tồn tại của nó trở thành kiến thức phổ biến và ý nghĩa của kiến thức phổ biến đó lan truyền khắp cộng đồng và vào cơ sở hạ tầng có liên quan Quá trình này sẽ mất nhiều thời gian đặc biệt trong trường hợp bảo đảm đặt hàng của Python 8 vì Python 2 kế thừa. 7 tiếp tục được sử dụng rộng rãi và do nhiều gói nguồn mở không được bảo trì tốt. Do đó, tôi hy vọng rằng việc sử dụng 6 để truyền đạt ý định tới các nhà phát triển khác và thư viện bên thứ ba sẽ vẫn là phương pháp hay nhất trong vài năm
Là từ điển được sắp xếp theo thứ tự hoặc không theo thứ tự?Lưu ý rằng từ điển không có thứ tự , nghĩa là bất cứ khi nào bạn lặp qua một từ điển, bạn sẽ duyệt qua mọi khóa, nhưng bạn thì không .
Là một từ điển một danh sách theo thứ tự?Danh sách là tập hợp dữ liệu được sắp xếp theo thứ tự, trong khi đó từ điển lưu trữ dữ liệu dưới dạng các cặp khóa-giá trị bằng cách sử dụng cấu trúc bảng băm .
Các giá trị từ điển có được sắp xếp theo thứ tự không?Như bạn sẽ thấy ở phần sau của hướng dẫn, sử dụng danh sách các bộ có thể là lựa chọn tốt nhất cho dữ liệu của bạn. Một điểm thiết yếu cần hiểu khi sắp xếp từ điển là mặc dù chúng bảo toàn thứ tự chèn, nhưng chúng không được coi là một chuỗi. Từ điển giống như một tập hợp các cặp khóa-giá trị và các bộ này không có thứ tự |