Создать структуру данных из списков

OmgZomg

Новичок
Пользователь
Апр 22, 2020
30
2
8
Имеется список списков
Python:
l=[
['Трава', 'label1', 'point', '[285, 78]'],
['Трава', 'label2', 'rectangle', '[[219, 41], [312, 95]]'],
['Асфальт', 'label1', 'rectangle', '[[385, 331], [418, 372]]']
]

Первые элементы списков могут повторяться, как в этом случае, где трава.


Нужно создать следующую структуру из этого

Python:
{'img_name':'file_name',
     'classes':{
         'Трава':[{'label_name':'label1',
                  'figure':'point',
                  'all_x':['285'],
                  'all_y':['78']},
                  {'label_name': 'label1',
                   'figure': 'rectangle',
                   'all_x': ['219','312'],
                   'all_y': ['41','95']}
                  ],

        'Асфальт':[
            {'label_name': 'label2',
             'figure': 'rectangle',
             'all_x': ['385', '418'],
             'all_y': ['331', '372']}
        ]}
     }
Как это сделать правильно, подскажите, пожалуйста
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот пример:
Python:
import ast


l = [
    ['Трава', 'label1', 'point', '[285, 78]'],
    ['Трава', 'label2', 'rectangle', '[[219, 41], [312, 95]]'],
    ['Асфальт', 'label1', 'rectangle', '[[385, 331], [418, 372]]']
]


d = {'img_name': 'file_name', 'classes': {}}

for list_ in l:
    if not d['classes'].get(list_[0]):
        d['classes'][list_[0]] = []
    d2 = {'label_name': list_[1], 'figure': list_[2]}
    x = ast.literal_eval(list_[3])[0]
    y = ast.literal_eval(list_[3])[1]
    if list_[2] == 'point':
        d2['all_x'] = [str(x)]
        d2['all_y'] = [str(y)]
    elif list_[2] == 'rectangle':
        d2['all_x'] = [str(x[0]), str(x[1])]
        d2['all_y'] = [str(y[0]), str(y[1])]

    d['classes'][list_[0]].append(d2)

print(d)
 
  • Мне нравится
Реакции: OmgZomg

Форум IT Специалистов