Как сделать ключ изображения первым? - PullRequest
0 голосов
/ 25 апреля 2018
labels = app.config["LABELS"]

затем print(labels)

   [{'name': '', 'image': '34-4.png', 'xMax': '2287', 'xMin': '2102', 'yMin': '53', 'id': '1', 'yMax': '110'},
    {'name': '', 'image': '34-4.png', 'xMax': '2414', 'xMin': '2299', 'yMin': '80', 'id': '2', 'yMax': '118'},
    {'name': '', 'image': '34-4.png', 'xMax': '2193', 'xMin': '2138', 'yMin': '128', 'id': '3', 'yMax': '140'}]

Фактический список намного больше, как я могу упорядочить эти значения, чтобы словарь начинался с изображения, а не имени, и по какой-то причине они всегда начинаются с имени, я проверил предыдущие ответы здесь, как Порядок клавиш в Словари Python , orderedDict но я не вставляю их таким образом, они у меня уже есть и я хочу изменить их (их порядок)

1 Ответ

0 голосов
/ 25 апреля 2018

Словари (если вы не используете бета-версию 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')])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...