«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как безопасно удалять элементы из словаря во время итерации в Python?

Как безопасно удалять элементы из словаря во время итерации в Python?

Опубликовано 12 ноября 2024 г.
Просматривать:936

How to Safely Delete Items from a Dictionary While Iterating in Python?

Итеративная модификация словаря

Обычно приходится удалять элементы из словаря, одновременно перебирая его. Однако эта операция изначально не поддерживается в 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