Cách chính xác để khởi tạo một từ điển có thứ tự (OD) để nó giữ lại thứ tự của dữ liệu ban đầu là gì?
from collections import OrderedDict
# Obviously wrong because regular dict loses order
d = OrderedDict({'b':2, 'a':1})
# An OD is represented by a list of tuples, so would this work?
d = OrderedDict([('b',2), ('a', 1)])
# What about using a list comprehension, will 'd' preserve the order of 'l'
l = ['b', 'a', 'c', 'aa']
d = OrderedDict([(i,i) for i in l])
Câu hỏi:
Sẽ
OrderedDict
giữ nguyên thứ tự của một danh sách các bộ dữ liệu, hoặc bộ dữ liệu hoặc bộ danh sách hoặc danh sách danh sách, vv được thông qua tại thời điểm khởi tạo (ví dụ thứ 2 & 3 ở trên)?Làm thế nào để đi xác minh nếu
OrderedDict
thực sự duy trì một trật tự? Vì adict
có một thứ tự không thể đoán trước, điều gì sẽ xảy ra nếu các vectơ kiểm tra của tôi may mắn có thứ tự ban đầu giống như thứ tự không thể đoán trước của một lệnh? Ví dụ, nếu thay vìd = OrderedDict({'b':2, 'a':1})
tôi viếtd = OrderedDict({'a':1, 'b':2})
, tôi có thể kết luận sai rằng trật tự được bảo tồn. Trong trường hợp này, tôi phát hiện ra rằng adict
được sắp xếp theo thứ tự abc, nhưng điều đó có thể không phải lúc nào cũng đúng. Cách đáng tin cậy để sử dụng một ví dụ mẫu để xác minh xem cấu trúc dữ liệu có giữ trật tự hay không, không thử các vectơ kiểm tra lặp đi lặp lại cho đến khi phá vỡ?
PS Tôi sẽ chỉ để lại ở đây để tham khảo : "Phương thức của hàm tạo OrderedDict và update () đều chấp nhận các đối số từ khóa, nhưng thứ tự của chúng bị mất vì hàm của Python gọi các đối số từ khóa thông qua ngữ nghĩa thông thường sử dụng một từ điển không có thứ tự thông thường"
PPS: Hy vọng, trong tương lai, OrderedDict sẽ giữ nguyên thứ tự của kwargs (ví dụ 1): http://bugs.python.org/su16991