Словарь в python с порядком, который я установил при запуске

Я делаю словарь:

d = {"server":"mpilgrim", "database":"master"}
d['mynewkey'] = 'mynewvalue'

Но когда я его показываю, я увидел, что этот дикт отменен.

print(d)

{'mynewkey': 'mynewvalue', 'database': 'master', 'server': 'mpilgrim'}

Как отменить его обратно?

Или, если это правда, что словарь не сортируется, что я должен использовать для сбора, где имеет смысл порядок этой информации?

Ответ 1

Словарь неупорядочен (порядок детерминирован, но зависит от нескольких факторов, о которых вы даже не думаете и не должны заботиться - хэш ключей, порядок вставки, коллизии и т.д.). В Python 2.7+ используйте collections.OrderedDict. Если вы должны использовать более старую версию, существуют различные реализации, на которые может указывать ваш google.

Ответ 2

from collections import OrderedDict

d = OrderedDict()
d["server"] = "mpilgrim"
d["database"] = "master"
d['mynewkey'] = 'mynewvalue'

print(d)

OrderedDict([('server', 'mpilgrim'), ('database', 'master'), ('mynewkey', 'mynewvalue')])

Ответ 3

Если вы используете словари python 3.6 теперь упорядочиваются по порядку вставки

https://www.python.org/dev/peps/pep-0468/

В противном случае (как говорили другие люди) я бы рекомендовал коллекции .OrderedDict

Ответ 4

Ваш словарь не совсем верен. Он сортируется частично в соответствии с хешем ваших ключей. Вы не можете изменить этот порядок (не используя собственный словарь). В python 2.7 или более поздней версии вы можете использовать упорядоченный словарь (collections.OrderedDict).

В более ранней версии вы можете использовать recipe.

Также рассмотрите этот вопрос: Какая наилучшая упорядоченная реализация dict в python?