Итеративная модификация словаря
Обычно приходится удалять элементы из словаря, одновременно перебирая его. Однако эта операция изначально не поддерживается в Python.
Изменение словаря во время итерации по нему может привести к ошибкам. Например, предоставленный вами фрагмент кода может завершиться ошибкой в Python 3 с ошибкой:
RuntimeError: dictionary changed size during iteration.
Решение Python 3
В Python 3 решение состоит в том, чтобы создать список ключей из словаря и вместо этого перебирать этот список. Вот пример:
# Python 3 or higher
for k in list(mydict.keys()):
if mydict[k] == 3:
del mydict[k]
Этот подход работает, поскольку список является неизменяемым и на него не влияют изменения в словаре.
Решение Python 2
В Python 2 методkeys() возвращает итератор, который нельзя изменить во время итерации. Чтобы изменить словарь, вы можете использовать следующий подход:
# Python 2
for k, v in mydict.items():
if v == 3:
del mydict[k]
В Python 2 вы также можете преобразовать итератор в список:
for k in mydict.keys():
if mydict[k] == 3:
del mydict[k]
Альтернативный подход
В качестве альтернативы вы можете использовать метод pop() для удаления элементов из словаря во время итерации:
for k in list(mydict.keys()):
if k == 3:
mydict.pop(k)
Обратите внимание, что этот подход более эффективен, поскольку не создает дополнительный список.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3