An OrderedDict is ordered by the order items are added to it.Как я могу помешать OrderedDict вставлять элемент, а не добавлять его в конец?
Так почему же это происходит?
У меня есть два словаря:
d_names
d_new_names
Вторым является переупорядочено версией первого. Это потому, что я понимаю, что I cannot re-order an existing OrderedDict - I need to create a new one.
Для этого я сначала создать упорядоченный список:
l_new_names = []
for s_number in d_names:
for s_week_number in d_names[s_number]:
l_new_names.append([s_number, s_week_number])
print "l_new_names before sort = %s" % l_new_names
l_new_names.sort()
print "l_new_names after sort = %s" % l_new_names
Затем я создаю и заполнение первого уровня нового словаря:
d_new_names = ordereddict.OrderedDict()
for s_number, _ in l_new_names:
if s_number in d_new_names:
print "NOT creating d_new_names[%s]" % s_number
else:
print "creating d_new_names[%s]" % s_number
d_new_names[s_number] = {}
d_new_names[s_number][NAME] = d_names[s_number][NAME]
Затем я создаю второй уровень и заполнить словарь:
for s_number, s_week_number in l_new_names:
d_new_names[s_number][s_week_number] = {}
d_new_names[s_number][s_week_number][DATE] = d_names[s_number][s_week_number][DATE]
d_new_names[s_number][s_week_number][PRICE] = d_names[s_number][s_week_number][PRICE]
Когда я написал содержание словаря в файл, я был удивлен, увидев это Последовательность:
writing week:13
writing week:15
writing week:14
writing week:16
То есть, неделя 15 предшествует неделя 14.
После исследования (печатание OrderedDict каждый раз через второй петли) Я нашел это (число соответствует петле):
- неделя 13 добавлено; заказ: 13
- неделя 14 добавлено; заказ: 13, 14
- неделя 15 добавлено; заказываются: 13, , 14
- неделя 16 добавлено; Последовательность: 13, 15, 14, 16
Вывод: во создания и вставки элементов в OrderedDict, элементы вставляются в неправильном порядке. Я не думал, что это возможно.
Может ли кто-нибудь объяснить, что происходит и как я это разрешаю?
Пожалуйста, разместите образцы данных для запуска кода. Этот код не является минимальным, чтобы воспроизвести проблему – MohitC
Что-то еще не так; упорядоченные словари очень поддерживают первоначальный порядок вставки. –