Подтвердить что ты не робот

Хранение записей словаря Python в порядке их нажатия

Словарь Python хранится не в определенном порядке (у отображений нет порядка), например

>>> myDict = {'first':'uno','second':'dos','third':'tres'}
myDict = {'first':'uno','second':'dos','third':'tres'}
>>> myDict
myDict
{'second': 'dos', 'third': 'tres', 'first': 'uno'}

Хотя можно получить отсортированный список или кортеж из словаря, мне интересно, можно ли сделать так, чтобы словарь сохранял элементы в том порядке, в котором они ему переданы, в предыдущем примере это означало бы наличие внутреннего порядка как {'first':'uno','second':'dos','third':'tres'} и ничем не отличаются.

Мне это нужно, потому что я использую словарь для хранения значений при чтении их из файла конфигурации; после прочтения и обработки (значения изменяются) они должны быть записаны в новый файл конфигурации в том же порядке, в котором они были прочитаны (этот порядок не является ни алфавитным, ни числовым).

Какие-нибудь мысли?

Обратите внимание, что я не ищу второстепенные способы получения порядка (например, списки), но способы заставить словарь упорядочиваться сам по себе (как это будет в следующих версиях Python).

4b9b3361

Ответ 2

Используйте список, чтобы сохранить порядок клавиш

Ответ 3

Реализации сохраняющих порядок словарей, безусловно, существуют.

Существует этот в Django, смутно названный SortedDict, который будет работать в Python >= 2.3 iirc.

Ответ 4

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

Инициализация:

keys = []
myDict = {}

При чтении:

myDict[key] = value
keys.append(key)

При записи:

for key in keys:
  print key, myDict[key]

Ответ 5

Вместо того, чтобы объяснять теоретическую часть, я приведу простой пример.

>>> from collections import OrderedDict
>>> my_dictionary=OrderedDict()
>>> my_dictionary['foo']=3
>>> my_dictionar['aol']=1
>>> my_dictionary
OrderedDict([('foo', 3), ('aol', 1)])

Ответ 6

Есть очень короткий ответ на этот вопрос. сделайте это -

dictCopy = yourdictname.copy()

то используйте dictCopy, он будет в том же порядке.