Страницы

Поиск по вопросам

пятница, 5 октября 2018 г.

Как удалить значение из словаря во время цикла for

Как-то неожиданно столкнулся с такой проблемой. Во время цикла for по словарю мне нужно удалять из него записи, но как не крути вылазит ошибка : RuntimeError: dictionary changed size during iteration Я даже пробовал делать снапшот словаря перед итерацией и итерировать двойника при этом удаляя из оригинала. Пример: >>> ot={12:'wqe',13:'wqe',14:'wqe',15:'wqe'} >>> ot1=ot >>> for i in ot1: ... del ot[i] ... Traceback (most recent call last): File "", line 1, in RuntimeError: dictionary changed size during iteration Как удалять правильно? upd: разобрался, снапшот был уместен, но сделан чуть чуть неправильно вот так правильно: >>> ot={12:'wqe',13:'wqe',14:'wqe',15:'wqe'} >>> ot1=ot.copy() >>> for i in ot1: ... del ot[i]


Ответ

Вы неверно понимаете причину происходящего. Вы задаете вопрос Как удалять правильно, но верный вопрос Как копировать правильно? Вы передаете ссылку на объект из ot в ot1, то есть при этом ot и ot1 дают указатель на один и тот же словарь. ПРИМЕР x=['wtf', 'justdoit'] x1=x x1[0]='omg' print x >> ['omg', 'justdoit']

Комментариев нет:

Отправить комментарий