аватар question@mail.ru · 01.01.1970 03:00

Как удалить значение из словаря во время цикла 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 ""<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]
аватар answer@mail.ru · 01.01.1970 03:00

Вы неверно понимаете причину происходящего.
Вы задаете вопрос Как удалять правильно, но верный вопрос
Как копировать правильно?
Вы передаете ссылку на объект из ot в ot1, то есть при этом ot и ot1 дают указатель на один и тот же словарь.
ПРИМЕР

x=['wtf', 'justdoit']x1=xx1[0]='omg'print x>> ['omg', 'justdoit']

Последние

Похожие