Akankah OrderedDict menjadi redundan di Python 3.7?

90

Dari log perubahan Python 3.7 :

sifat pelestarian urutan penyisipan dari objek dict telah dinyatakan sebagai bagian resmi dari spesifikasi bahasa Python.

Apakah ini berarti itu OrderedDictakan menjadi mubazir? Satu-satunya kegunaan yang dapat saya pikirkan adalah untuk menjaga kompatibilitas mundur dengan versi Python yang lebih lama yang tidak mempertahankan urutan penyisipan untuk kamus normal.

James Hiew
sumber

Jawaban:

132

Tidak, itu tidak akan menjadi mubazir di Python 3.7 karena OrderedDictbukan hanya dictmempertahankan urutan penyisipan, itu juga menawarkan metode tergantung pesanan OrderedDict.move_to_end(), dan mendukung reversed()iterasi *.

Selain itu, perbandingan kesetaraan dengan OrderedDictsensitif urutan dan ini masih tidak berlaku untuk dictPython 3.7, misalnya:

>>> OrderedDict([(1,1), (2,2)]) == OrderedDict([(2,2), (1,1)]) 
False
>>> dict([(1,1), (2,2)]) == dict([(2,2), (1,1)]) 
True

Dua pertanyaan relevan di sini dan di sini .

* Dukungan untuk reversed()iterasi Python biasa dictditambahkan untuk Python 3.8, lihat issue33462

Chris_Rands
sumber
Poin tentang sensitivitas pesanan saat membandingkan sangat valid di sini.
Tim Skov Jacobsen