Доступ к словарю Python внутри словаря возвращает искаженный - PullRequest
0 голосов
/ 08 октября 2018

Я недавно работал над приложением Python, которое обрабатывает какое-то расписание.У меня есть словарь, который содержит количество дней в ротации в расписании, а затем каждый день содержит словарь с каждой отдельной частью дня.Это выглядит так:

schedule = {
'rotation': 6,
'1' : {'B': '8:32', 'C': '9:34', 'D' : '10:36', 'F':'12:11', 'G': '1:13', 'H':'2:15'},

'2' : {'A': '8:32', 'B': '9:34', 'C,' : '10:36', 'E':'12:11', 'F': '1:13', 'G,':'2:15'},

'3' : {'A': '8:32', 'B': '9:34', 'D,' : '10:36', 'E':'12:11', 'F': '1:13', 'H,':'2:15'},

'4' : {'A': '8:32', 'C': '9:34', 'D,' : '10:36', 'E':'12:11', 'G': '1:13', 'H,':'2:15'},


'5' : {'B' : '8:40', 'D' : '11:00', 'F' : '12:55', 'H' : '2:15' },

'6' : {'A' : '8:40', 'C' : '11:00', 'E' : '12:55', 'G' : '2:15' }

}

Все это выглядит так, как будто оно должно работать, но когда я распечатываю его, я получаю искаженный словарь, который выглядит так, как будто он отсортирован:

{'1': {'C': '9:34', 'B': '8:32', 'D': '10:36', 'G': '1:13', 'F': '12:11', 'H': '2:15'}, 
'3': {'A': '8:32', 'D,': '10:36', 'B': '9:34', 'E': '12:11', 'F': '1:13', 'H,': '2:15'}, 
'2': {'A': '8:32', 'B': '9:34', 'E': '12:11', 'F': '1:13', 'C,': '10:36', 'G,': '2:15'}, 
'5': {'H': '2:15', 'B': '8:40', 'D': '11:00', 'F': '12:55'}, 
'4': {'A': '8:32', 'C': '9:34', 'E': '12:11', 'G': '1:13', 'D,': '10:36', 'H,': '2:15'}, 
'6': {'A': '8:40', 'C': '11:00', 'E': '12:55', 'G': '2:15'}, 
'rotation': 6}

Как вы можете видеть, в первый день он начинается с C вместо B при печати, а «вращение» находится в конце словаря, а не спереди.Почему мой словарь печатается так?

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Python словарь не требуется для сохранения порядка.Если вы хотите заказать, вы можете использовать списки.Если вы просто хотите просмотреть словарь в отсортированном порядке, вы можете использовать .sort() или sorted(), чтобы помочь вам печатать.

0 голосов
/ 09 октября 2018

Вы можете отсортировать этот словарь, но вы должны сделать исключение для rotation, поскольку его значения не соответствуют остальной части формата словаря с алфавитными клавишами

d = {k: dict(sorted(v.items(), key=lambda x: x[0])) if k != 'rotation' else schedule[k] for k, v in schedule.items()}
print(d)
# {'rotation': 6, '1': {'B': '8:32', 'C': '9:34', 'D': '10:36', 'F': '12:11', 'G': '1:13', 'H': '2:15'}, '2': {'A': '8:32', 'B': '9:34', 'C,': '10:36', 'E': '12:11', 'F': '1:13', 'G,': '2:15'}, '3': {'A': '8:32', 'B': '9:34', 'D,': '10:36', 'E': '12:11', 'F': '1:13', 'H,': '2:15'}, '4': {'A': '8:32', 'C': '9:34', 'D,': '10:36', 'E': '12:11', 'G': '1:13', 'H,': '2:15'}, '5': {'B': '8:40', 'D': '11:00', 'F': '12:55', 'H': '2:15'}, '6': {'A': '8:40', 'C': '11:00', 'E': '12:55', 'G': '2:15'}}
0 голосов
/ 08 октября 2018

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

...