yarkov
@yarkov
Помог ответ? Отметь решением.

Как получить не сортированный словарь?

Есть файл json. Отформатирован красиво, с отступами, ключи в нужном порядке расположены. Читаю из него так:
with codecs.open(self.__configPath, "r", encoding = self.__charset) as f:
	self.__JSON = eval(f.read())

Теперь в self.__JSON хранится словарь, но в нем элементы отсортированы по ключу, а мне не надо )) В принципе на работу программы это не влияет, но хочется потом при записи сохранить форматирование и порядок ключей. С помощью json.load() читал - та же фигня.
  • Вопрос задан
  • 321 просмотр
Решения вопроса 1
sim3x
@sim3x
Dict в питоне не сортируется по ключу
Используй OrderedDict
https://docs.python.org/3/library/collections.html
https://docs.python.org/2/library/collections.html
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@newpy
web-dev
dictionary is an unordered set of key: value pairs
что в переводе означает, что словари в питоне не гарантируют сохранение порядка (например в отличии от PHP). Так что вряд ли у вас словарь отсортирован по ключу. Кстати обратите внимание как у вас было, и как стало. Как раз порядок элементов поменялся ДО и ПОСЛЕ.
Было:
"APP": {
        "name": "Application name", 
        "description": "Application description", 
        "version": "1.0.0"

Стало:
"APP": {
        "description": "Application description", 
        "name": "Application name", 
        "version": "1.0.0"


Как уже ответил sim3x и привел ссылки, то просто привожу пример оттуда же, в каком конкретно месте это написано как это сделать.

>>> # regular unsorted dictionary
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

>>> # dictionary sorted by key
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

>>> # dictionary sorted by value
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

>>> # dictionary sorted by length of the key string
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы