Soerrrrrr
@Soerrrrrr
да, только в 2020 я начал учить программирование)

Списки словари Странность или баг?

Задача была такая ...
нужно отсортировать список словарей и
оставить там только словари со страной Россия
x = "Россия"
geo_logs = [
    {'visit1': ['Москва', 'Россия']},
    {'visit2': ['Дели', 'Индия']},
    {'visit3': ['Владимир', 'Россия']},
    {'visit4': ['Лиссабон', 'Португалия']},
    {'visit5': ['Париж', 'Франция']},
    {'visit6': ['Лиссабон', 'Португалия']},
    {'visit7': ['Тула', 'Россия']},
    {'visit8': ['Тула', 'Россия']},
    {'visit9': ['Курск', 'Россия']},
    {'visit10': ['Архангельск', 'Россия']},
    {'visit11': ['Минск', 'Беларусь']},
    {'visit12': ['Париж', 'Франция']}
]

for element in geo_logs:
    for visit, country in element.items():
        if country[1] != x:
            geo_logs.remove(element)
print(geo_logs)


я написал код которой в моем представлении должен просто удалять элементы не содержащие "Россия", но у меня не удаляет то не только еще и то что содержит "Франция"

Может кот-то объяснить в чем дело и почему так выходит ?
  • Вопрос задан
  • 423 просмотра
Решения вопроса 2
ScriptKiddo
@ScriptKiddo
Нельзя делать итерацию по списку и одновременно удалять элементы. Делайте итерацию по копии и удаляйте из исходного массива.
for element in geo_logs[:]:
Ответ написан
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Полагаю, дело в том, что вы делаете remove и меняете список. И продолжаете по нему двигаться, но он уже изменился, а вы полагаете, что он тот же. Дело не во Франции, это случайность.

Попробуйте не менять исходный список, а писать в новый — всё должно заработать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы