Словари (если вы не используете бета-версию Python 3.7) не заказаны.Они не имеют понятия порядка и могут давать значения в любом порядке, который в зависимости от вашей реализации может меняться с каждой итерацией.
Вы должны использовать список из двух кортежей или OrderedDict.Чтобы превратить диктовку в упорядоченную, используйте
od = collections.OrderedDict(sorted(labels[index].items(), key=f))
, где f
- это функция, принимающая один аргумент кортежа (key, value)
, определяющий способ сортировки.Если вам нужен только ключ 'image'
, используйте
f = lambda t: t[0] != 'image'
, который вернет False
(он же 0
) для image
и True
(aka 1
) для любой другой клавиши.
Редактировать:
Итак, с вашими labels
, как определено выше, выполните:
for index, label in enumerate(labels):
labels[index] = collections.OrderedDict(
sorted(label.items(), key=lambda t: t[0] != 'image'))
Выходы labels
:
[OrderedDict([('image', '34-4.png'),
('name', ''),
('xMax', '2287'),
('xMin', '2102'),
('yMin', '53'),
('id', '1'),
('yMax', '110')]),
OrderedDict([('image', '34-4.png'),
('name', ''),
('xMax', '2414'),
('xMin', '2299'),
('yMin', '80'),
('id', '2'),
('yMax', '118')]),
OrderedDict([('image', '34-4.png'),
('name', ''),
('xMax', '2193'),
('xMin', '2138'),
('yMin', '128'),
('id', '3'),
('yMax', '140')])]