Apa cara yang benar untuk menginisialisasi kamus berurutan (OD) sehingga mempertahankan urutan data awal?
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])
Pertanyaan:
Akankah
OrderedDict
mempertahankan urutan daftar tupel, atau tupel tupel atau tupel daftar atau daftar daftar, dll. Diteruskan pada saat inisialisasi (contoh ke-2 & ke-3 di atas)?Bagaimana cara memverifikasi jika
OrderedDict
benar-benar mempertahankan pesanan? Karena adict
memiliki urutan yang tidak dapat diprediksi, bagaimana jika vektor pengujian saya untungnya memiliki urutan awal yang sama dengan urutan dikt yang tidak dapat diprediksi? Misalnya, jika alih-alihd = OrderedDict({'b':2, 'a':1})
saya menulisd = OrderedDict({'a':1, 'b':2})
, saya dapat secara keliru menyimpulkan bahwa pesanan dipertahankan. Dalam kasus ini, saya menemukan bahwa adict
diurutkan menurut abjad, tetapi itu mungkin tidak selalu benar. Apa cara yang dapat diandalkan untuk menggunakan counterexample untuk memverifikasi apakah struktur data mempertahankan urutan atau tidak, singkatnya mencoba vektor uji berulang kali hingga satu rusak?
PS Saya akan meninggalkan ini di sini untuk referensi : "The OrderedDict konstruktor dan update () metode keduanya menerima argumen kata kunci, tetapi urutan mereka hilang karena fungsi Python panggilan semantik argumen kata kunci pass-in menggunakan kamus tidak berurutan biasa"
PPS: Mudah-mudahan, di masa mendatang, OrderedDict juga akan mempertahankan urutan kwargs (contoh 1): http://bugs.python.org/issue16991