Как удалить значение из словаря во время цикла for
📁 python, ошибка, пример
Как-то неожиданно столкнулся с такой проблемой. Во время цикла 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 ""<stdin>"", line 1, in <module>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=xx1[0]='omg'print x>> ['omg', 'justdoit'] Войдите чтобы оставить ответ