Начиная с Python 3.6, стандартный dict
тип поддерживает порядок вставки по умолчанию.
определяющий
d = {'ac':33, 'gw':20, 'ap':102, 'za':321, 'bs':10}
приведет к появлению словаря с ключами в порядке, указанном в исходном коде.
Это было достигнуто путем использования простого массива с целыми числами для разреженной хеш-таблицы, где эти целые числа индексируют в другой массив, в котором хранятся пары ключ-значение (плюс вычисленный хеш). Этот последний массив просто хранит элементы в порядке вставки, и вся комбинация фактически использует меньше памяти, чем реализация, используемая в Python 3.5 и ранее. Посмотрите оригинальное сообщение идеи Раймондом Хеттингером для деталей.
В 3.6 это все еще считалось деталью реализации; см в Что нового в Python 3.6 документации :
Сохраняющий порядок аспект этой новой реализации считается деталью реализации, и на него не следует полагаться (это может измениться в будущем, но желательно иметь эту новую реализацию dict в языке в течение нескольких выпусков, прежде чем изменять спецификацию языка. предписывать семантику сохранения порядка для всех текущих и будущих реализаций Python, что также помогает сохранить обратную совместимость со старыми версиями языка, где все еще действует случайный порядок итераций, например, Python 3.5).
Python 3.7 переводит эту деталь реализации в спецификацию языка , поэтому теперь обязательно dict
сохранять порядок во всех реализациях Python, совместимых с этой версией или более новой. Смотрите заявление BDFL .
Вы все еще можете использовать collections.OrderedDict()
класс в некоторых случаях, так как он предлагает некоторые дополнительные функции поверх стандартного dict
типа. Например, быть обратимым (это распространяется на объекты вида ) и поддерживать переупорядочение (с помощью move_to_end()
метода ).