На этом шаге мы рассмотрим способ поддержания такого порядка.
Вы хотите создать словарь, который позволит контролировать порядок элементов при итерировании по нему или при сериализации.
Чтобы контролировать порядок элементов в словаре, вы можете использовать OrderedDict из модуля collections. При итерировании он в
точности сохраняет изначальный порядок добавления данных. Например: from collections import OrderedDict d = OrderedDict() d['foo'] = 1 d['bar'] = 2 d['spam'] = 3 d['grok'] = 4 # Выведет "foo 1", "bar 2", "spam 3", "grok 4" for key in d: print(key, d[key])
OrderedDict особенно полезен, когда вы хотите создать отображение, которое в дальнейшем собираетесь сериализовать или закодировать в другой формат. Например, если вы хотите строго контролировать порядок полей, выводимых в формате JSON, вам нужно просто создать OrderedDict с нужными данными:
>>> import json >>> json.dumps(d) '{"foo": 1, "bar": 2, "spam": 3, "grok": 4}' >>>
OrderedDict внутри себя поддерживает двусвязный список, который упорядочивает ключи в соответствии с порядком добавления. Когда новый элемент вставляется впервые, он помещается в конец этого списка. Последующее связывание значения с существующим ключом не изменяет порядок.
Заметьте, что размер OrderedDict более чем в два раза превышает размер обычного словаря из-за содержащегося внутри дополнительного списка. А если вы собираетесь создать структуру данных, в которой будет большое число экземпляров OrderedDict (например, вы хотите прочитать 100 000 строк CSV-файла в список экземпляров OrderedDict), вам стоит изучить требования вашего приложения, чтобы решить, перевесят ли преимущества использования OrderedDict затраты на дополнительную память.
На следующем шаге мы рассмотрим вычисления со словарями.