Python OrderedDict не поддерживает порядок элементов - программирование
Подтвердить что ты не робот

Python OrderedDict не поддерживает порядок элементов

Я пытаюсь создать объект OrderedDict, но не успеваю его создать, чем все элементы смешались.

Это то, что я делаю:

from collections import OrderedDict
od = OrderedDict({(0,0):[2],(0,1):[1,9],(0,2):[1,5,9]})

Элементы не остаются в том порядке, в котором я назначаю

od
OrderedDict([((0, 1), [1, 9]), ((0, 0), [2]), ((0, 2), [1, 5, 9])])

docs.python.org не имеет примера, и я не могу понять, почему заказ становится беспорядочным. Любая помощь приветствуется.

4b9b3361

Ответ 1

Ваша проблема заключается в том, что вы создаете dict, чтобы дать исходные данные OrderedDict - этот dict не хранит никакого порядка, поэтому порядок утерян до того, как он попадет в OrderedDict.

Решение состоит в том, чтобы строить из упорядоченного типа данных - самым простым из них является list of tuple s:

>>> from collections import OrderedDict
>>> od = OrderedDict([((0, 0), [2]), ((0, 1), [1, 9]), ((0, 2), [1, 5, 9])])
>>> od
OrderedDict([((0, 0), [2]), ((0, 1), [1, 9]), ((0, 2), [1, 5, 9])])

Стоит отметить, что именно поэтому OrderedDict использует синтаксис, который он делает для него, строковое представление. Строковые представления должны пытаться быть допустимым кодом Python для воспроизведения объекта, где это возможно, и поэтому вывод использует список кортежей вместо диктата.