2015-02-27 13 views
5

Các tài liệu collections.OrderedDict mô tả một OrderedDict như mộtOrderedDict: là các giá trị được đặt hàng?

một dict mà nhớ thứ tự mà các phím lần đầu tiên được đưa vào

do đó thứ tự của

for k in dict: 
    ... 

for k in dict.keys(): 
    ... 

là dự đoán được.

Tuy nhiên, nó không nói gì về giá trị. Nếu tôi chỉ cần lặp lại các giá trị như sau, liệu các kết quả cũng sẽ tôn trọng thứ tự-chèn-chèn không?

for v in dict.values(): 
    ... 

Một vài xét nghiệm nhanh chóng ở đây trong CPython cho thấy là trường hợp, nhưng điều đó chỉ có thể là coinicidental với việc thực hiện hiện tại (tôi đã không kiểm tra bất kỳ người khác).

Trả lời

7

Có, danh sách theo số keys()values() được sắp xếp theo thứ tự tương ứng trong tất cả các mã, not just in ordered ones. (Trình tự là tùy ý cho dicts bình thường, nhưng nó cùng trật tự tùy ý cho keys(), values()items(), trừ khi dict đã được sửa đổi trong khi chờ đợi.)

2

Vâng, họ đều được sắp xếp theo thứ tự giống như phím là. Điều này tương tự với tất cả các triển khai dict.

Keys và các giá trị được lặp qua trong một trật tự tùy ý đó là phi ngẫu nhiên, thay đổi qua việc triển khai Python, và phụ thuộc vào lịch sử điển của chèn và xóa bỏ. Nếu các khóa, giá trị và lượt xem các mục được lặp lại mà không có sửa đổi can thiệp vào từ điển , thứ tự của các mục sẽ tương ứng trực tiếp. Điều này cho phép tạo các cặp (value, key) sử dụng zip(): pairs = zip(d.values(), d.keys()). Một cách khác để tạo cùng một danh sách là pairs = [(v, k) for (k, v) in d.items()].

https://docs.python.org/3/library/stdtypes.html#dict-views

Các vấn đề liên quan