Удалить элементы из списка словарей

OmgZomg

Новичок
Пользователь
Апр 22, 2020
30
2
8
Здравствуйте!

Имеется список из словарей

Python:
list = [
{'img_file': '161_38768_23018.png', 'num': 161, 'x': 387, 'y': 230}
{'img_file': '224_45018_23107.png', 'num': 224, 'x': 450, 'y': 330}
{'img_file': '266_41452_23696.png', 'num': 266, 'x': 414, 'y': 430}
{'img_file': '294_38682_23696.png', 'num': 294, 'x': 386, 'y': 430}
{'img_file': '328_35253_23696.png', 'num': 328, 'x': 352, 'y': 430}
{'img_file': '496_26362_24374.png', 'num': 496, 'x': 263, 'y': 530}
{'img_file': '734_40760_25052.png', 'num': 734, 'x': 407, 'y': 630}
{'img_file': '741_40060_25052.png', 'num': 741, 'x': 400, 'y': 630}
{'img_file': '748_39362_25052.png', 'num': 748, 'x': 393, 'y': 630}
{'img_file': '755_38663_25052.png', 'num': 755, 'x': 386, 'y': 630}
{'img_file': '762_37996_25052.png', 'num': 762, 'x': 379, 'y': 630}
{'img_file': '1056_36136_25730.png', 'num': 1056, 'x': 361, 'y': 730}
{'img_file': '1063_36835_25730.png', 'num': 1063, 'x': 368, 'y': 730}
{'img_file': '1070_37533_25730.png', 'num': 1070, 'x': 375, 'y': 730}
{'img_file': '1077_38232_25730.png', 'num': 1077, 'x': 382, 'y': 730}
{'img_file': '1084_38943_25730.png', 'num': 1084, 'x': 389, 'y': 730}
{'img_file': '1091_39605_25730.png', 'num': 1091, 'x': 396, 'y': 730}
{'img_file': '1098_40304_25730.png', 'num': 1098, 'x': 403, 'y': 730}
        
]

И есть список значений 'y' :
Python:
list_y=[230, 330, 430, 530, 830]

Нужно удалить все элементы из основного списка, где значения ключа 'y' находятся в списке list_y

Написал код

Python:
for d in list:
    if d['y'] in list_y:
        list.remove(d)

Выдает результат

Python:
{'img_file': '224_45018_23107.png', 'num': 224, 'x': 450, 'y': 330}

{'img_file': '294_38682_23696.png', 'num': 294, 'x': 386, 'y': 430}

{'img_file': '496_26362_24374.png', 'num': 496, 'x': 263, 'y': 530}

{'img_file': '734_40760_25052.png', 'num': 734, 'x': 407, 'y': 630}

{'img_file': '741_40060_25052.png', 'num': 741, 'x': 400, 'y': 630}

{'img_file': '748_39362_25052.png', 'num': 748, 'x': 393, 'y': 630}

{'img_file': '755_38663_25052.png', 'num': 755, 'x': 386, 'y': 630}

{'img_file': '762_37996_25052.png', 'num': 762, 'x': 379, 'y': 630}

{'img_file': '1056_36136_25730.png', 'num': 1056, 'x': 361, 'y': 730}

{'img_file': '1063_36835_25730.png', 'num': 1063, 'x': 368, 'y': 730}

{'img_file': '1070_37533_25730.png', 'num': 1070, 'x': 375, 'y': 730}

{'img_file': '1077_38232_25730.png', 'num': 1077, 'x': 382, 'y': 730}

{'img_file': '1084_38943_25730.png', 'num': 1084, 'x': 389, 'y': 730}

{'img_file': '1091_39605_25730.png', 'num': 1091, 'x': 396, 'y': 730}

{'img_file': '1098_40304_25730.png', 'num': 1098, 'x': 403, 'y': 730}


Как видно, удалилось не всё. Что я в коде написал не так?
 
  • Мне нравится
Реакции: Student

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Не нужно удалять элементы из списка по которому проходите в цикле (это приводит к ошибкам). Лучше добавлять нужные элементы в другой список:
Python:
list1 = [
    {'img_file': '161_38768_23018.png', 'num': 161, 'x': 387, 'y': 230},
    {'img_file': '224_45018_23107.png', 'num': 224, 'x': 450, 'y': 330},
    {'img_file': '266_41452_23696.png', 'num': 266, 'x': 414, 'y': 430},
    {'img_file': '294_38682_23696.png', 'num': 294, 'x': 386, 'y': 430},
    {'img_file': '328_35253_23696.png', 'num': 328, 'x': 352, 'y': 430},
    {'img_file': '496_26362_24374.png', 'num': 496, 'x': 263, 'y': 530},
    {'img_file': '734_40760_25052.png', 'num': 734, 'x': 407, 'y': 630},
    {'img_file': '741_40060_25052.png', 'num': 741, 'x': 400, 'y': 630},
    {'img_file': '748_39362_25052.png', 'num': 748, 'x': 393, 'y': 630},
    {'img_file': '755_38663_25052.png', 'num': 755, 'x': 386, 'y': 630},
    {'img_file': '762_37996_25052.png', 'num': 762, 'x': 379, 'y': 630},
    {'img_file': '1056_36136_25730.png', 'num': 1056, 'x': 361, 'y': 730},
    {'img_file': '1063_36835_25730.png', 'num': 1063, 'x': 368, 'y': 730},
    {'img_file': '1070_37533_25730.png', 'num': 1070, 'x': 375, 'y': 730},
    {'img_file': '1077_38232_25730.png', 'num': 1077, 'x': 382, 'y': 730},
    {'img_file': '1084_38943_25730.png', 'num': 1084, 'x': 389, 'y': 730},
    {'img_file': '1091_39605_25730.png', 'num': 1091, 'x': 396, 'y': 730},
    {'img_file': '1098_40304_25730.png', 'num': 1098, 'x': 403, 'y': 730}
]

list_y = [230, 330, 430, 530, 830]

list2 = []

for d in list1:
    if d['y'] not in list_y:
        list2.append(d)

for i in list2:
    print(i)
 
  • Мне нравится
Реакции: OmgZomg и Student

borntohack

змееуст
Команда форума
Модератор
Апр 22, 2020
78
62
18
39
Москва, РФ
попробуйте еще раз, но не называйте переменные функциями самого python
пусть будет не list, а tlist например
 
  • Мне нравится
Реакции: Student

OmgZomg

Новичок
Пользователь
Апр 22, 2020
30
2
8
Не нужно удалять элементы из списка по которому проходите в цикле (это приводит к ошибкам). Лучше добавлять нужные элементы в другой список:
Python:
list1 = [
    {'img_file': '161_38768_23018.png', 'num': 161, 'x': 387, 'y': 230},
    {'img_file': '224_45018_23107.png', 'num': 224, 'x': 450, 'y': 330},
    {'img_file': '266_41452_23696.png', 'num': 266, 'x': 414, 'y': 430},
    {'img_file': '294_38682_23696.png', 'num': 294, 'x': 386, 'y': 430},
    {'img_file': '328_35253_23696.png', 'num': 328, 'x': 352, 'y': 430},
    {'img_file': '496_26362_24374.png', 'num': 496, 'x': 263, 'y': 530},
    {'img_file': '734_40760_25052.png', 'num': 734, 'x': 407, 'y': 630},
    {'img_file': '741_40060_25052.png', 'num': 741, 'x': 400, 'y': 630},
    {'img_file': '748_39362_25052.png', 'num': 748, 'x': 393, 'y': 630},
    {'img_file': '755_38663_25052.png', 'num': 755, 'x': 386, 'y': 630},
    {'img_file': '762_37996_25052.png', 'num': 762, 'x': 379, 'y': 630},
    {'img_file': '1056_36136_25730.png', 'num': 1056, 'x': 361, 'y': 730},
    {'img_file': '1063_36835_25730.png', 'num': 1063, 'x': 368, 'y': 730},
    {'img_file': '1070_37533_25730.png', 'num': 1070, 'x': 375, 'y': 730},
    {'img_file': '1077_38232_25730.png', 'num': 1077, 'x': 382, 'y': 730},
    {'img_file': '1084_38943_25730.png', 'num': 1084, 'x': 389, 'y': 730},
    {'img_file': '1091_39605_25730.png', 'num': 1091, 'x': 396, 'y': 730},
    {'img_file': '1098_40304_25730.png', 'num': 1098, 'x': 403, 'y': 730}
]

list_y = [230, 330, 430, 530, 830]

list2 = []

for d in list1:
    if d['y'] not in list_y:
        list2.append(d)

for i in list2:
    print(i)
Благодарю!
 

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