Словарь в 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?