З Python 3.6 далі стандартний dict
тип підтримує порядок вставки за замовчуванням.
Визначення
d = {'ac':33, 'gw':20, 'ap':102, 'za':321, 'bs':10}
призведе до словника з ключами у порядку, зазначеному у вихідному коді.
Це було досягнуто за допомогою простого масиву з цілими числами для розрідженої хеш-таблиці, де ці цілі числа індексуються в інший масив, який зберігає пари ключ-значення (плюс обчислений хеш). Цей останній масив просто відбувається для зберігання елементів у порядку вставки, і вся комбінація фактично використовує менше пам'яті, ніж реалізація, що використовується в Python 3.5 і раніше. Докладніше дивіться в оригінальній публікації ідеї Реймонда Хеттінгера .
У 3.6 це все ще вважалося детальною частиною реалізації; дивіться Що нового в Python 3.6 в документації :
Аспект збереження порядку в цій новій реалізації вважається детальною інформацією про реалізацію, і на неї не слід покладатися (це може змінитися в майбутньому, але бажано мати нову реалізацію диктату мовою протягом декількох випусків, перш ніж змінити мовну специфікацію призначати збереження порядку в семантиці для всіх поточних та майбутніх реалізацій Python; це також допомагає зберегти зворотну сумісність із старими версіями мови, де досі діє випадковий порядок ітерації, наприклад, Python 3.5).
Python 3.7 підвищує цю деталь реалізації до мовної специфікації , тому тепер обов'язково dict
зберігається порядок у всіх реалізаціях Python, сумісних з цією версією чи новішою. Див . Вимову BDFL .
Ви все ще можете використовувати collections.OrderedDict()
клас у певних випадках, оскільки він пропонує додаткову функціональність поверх стандартного dict
типу. Такі як реверсивність (це поширюється на об'єкти перегляду ) та підтримка переупорядкування (за допомогою move_to_end()
методу ).