2013-07-11 2 views
0

В моем коде я Переберите ключей в словаре, и если ключ соответствует условию (существование в другом списке) пара ключ-значение удаляется:Удаление ключей в словаре останавливает цикл и вызывает ошибку

for key in my_dict: 
    if key in my_list: 
     del my_dict[key] 

Проблема в том, что когда я запускаю код, я получаю сообщение об ошибке: «измененный размер слова во время итерации». Я понимаю, что я не могу сделать это с:

for i in range(len(my_dict)):... 

поскольку ключевые индексы в моем словаре будет меняться с каждым удалением.

Есть ли способ удалить элементы в словаре без привлечения ошибки?

+0

Обеспечение справедливого образца, если это возможно было бы здорово. Это экономит время на другом конце и в большинстве случаев на раннем этапе ответа. – LonelySoul

ответ

1

Вам не нужно зацикливать словарь.

lst = ['4','8','15','16','23','42'] 
dct = {'4':4, 'foo':'bar'} 
keys = dct.keys() 

for key in lst: 
    if key in keys: 
     dct.pop(key) 
0

Ответ на этот вопрос требует копирования словаря. Мне нужно написать небольшую функцию. См. this нить.

0

Вы должны сначала создать копию Dict (мой):

my = {2:5, 3:4, 7:9} 
lst = [2,7] 
del_my = dict(my) 


for i in my: 
    if i in lst: 
     del del_my[i] 


print del_my 
1

нет никакой необходимости перебора всех ключей в Словаре обязательно

for key in my_list: 
    my_dict.pop(key, None) 

будет делать это.

pop здесь удалит элемент, если он существует, но не вызывает исключения, если есть ключ в my_list, который не находится в dict.

Смежные вопросы