Как выполнить l oop через вложенный список, сравнить первый элемент с другим списком, а затем добавить в новый список? - PullRequest
2 голосов
/ 29 марта 2020

Я пытаюсь создать три отдельных списка (обучение, тестирование и проверка) для CNN.
У меня есть три списка (train_data, test_data, val_data), которые ТОЛЬКО содержат имена изображений

train_data = ["img_1.png", "img_2.png"] 
test_data = ["image_3.png", "img_4.png"] 
val_data = ["img_5.png", "img_6.png"]

У меня есть еще один вложенный список, который содержит все имена изображений и соответствующие метки для глубокого изучения модель

image_annotations = [['img_1.png', 432, 662, 554, 749, 'class'], 
    ['img_1.png', 647, 456, 754, 594, 'class'], ['img_2.png', 598, 659, 897, 
    302, 'class']]

Я бы хотел запустить al oop через мой список image_annotations, и если имя изображения совпадает с именем изображения в моих списках train_data, test_data, val_data, я хочу добавьте четыре следующих номера и имя класса в этот список. Список image_annotations содержит несколько списков одного изображения, но с разными номерами ограничивающих рамок. Я полагаю, что это может быть довольно просто, но я не могу понять это.

Ответы [ 3 ]

0 голосов
/ 29 марта 2020

Это будет ответ на ваш вопрос

train_data = ["img_1.png", "img_2.png"] 
test_data = ["image_3.png", "img_4.png"] 
val_data = ["img_5.png", "img_6.png"]
image_annotations = [['img_1.png', 432, 662, 554, 749, 'class'],['img_1.png', 647, 456, 754, 594, 'class'],['img_2.png', 598, 659, 897, 302, 'class']]
my_lists = [train_data, test_data, val_data]
for im in image_annotations:
    for k in my_lists:
        if im[0] in k:
            for i in range(1,5):
                k.append(im[i])

for list in my_lists:
    print(list)
0 голосов
/ 29 марта 2020

вы можете использовать:

train_data = ["img_1.png", "img_2.png"] 
test_data = ["image_3.png", "img_4.png"] 
val_data = ["img_5.png", "img_6.png"]

image_annotations = [['img_1.png', 432, 662, 554, 749, 'class'], 
    ['img_1.png', 647, 456, 754, 594, 'class'], ['img_2.png', 598, 659, 897, 
    302, 'class']]

# get a maping with all the img names and their value
d = {}
for e in image_annotations:
    d.setdefault(e[0], []).append(e)


# set new values to data variables accordding to dict d
for l in train_data, test_data, val_data:
    l[:] = [e for i in l for e in d.get(i, [i])]


print(train_data)
print(test_data)
print(val_data)

вывод:

[['img_1.png', 432, 662, 554, 749, 'class'], ['img_1.png', 647, 456, 754, 594, 'class'], ['img_2.png', 598, 659, 897, 302, 'class']]
['image_3.png', 'img_4.png']
['img_5.png', 'img_6.png']
0 голосов
/ 29 марта 2020

Я думаю, что это может помочь вам:

train_data_full = []
for t_d in train_data:
    for i_a in image_annotations:
        if t_d in i_a:
            train_data_full.append(i_a)
...