То, что вы делаете, выдает исключение одновременной модификации в Java. d.keys()
создает список ключей в том виде, в котором они существуют, когда вы его вызываете, но этот список теперь статичен - изменения в d
не изменят сохраненную версию d.keys()
. Поэтому, когда вы перебираете d.keys()
, но удаляете элементы, у вас появляется возможность изменить ключ, которого больше нет.
Вы можете использовать d.pop(k, None)
, который будет возвращать либо значение, сопоставленное с k
, либо None
, если k
отсутствует. Это позволяет избежать проблемы KeyError
.
РЕДАКТИРОВАТЬ: Для пояснения, чтобы предотвратить больше фантомных downmods (нет проблем с отрицательной обратной связью, просто сделайте его конструктивным и оставьте комментарий, чтобы мы могли провести потенциально информативное обсуждение - я здесь, чтобы узнать, а также помочь): 1014 *
Это правда, что в этом конкретном состоянии это не должно быть испорчено . Я просто выдвигал это как потенциальную проблему, потому что, если он использует такую же схему кодирования в другой части программы, где он не настолько осторожен / счастлив, как он обрабатывает структуру данных, такие проблемы могут возникнуть. Он даже не использует словарь, а скорее класс, который реализует определенные методы, чтобы вы могли обращаться с ним аналогичным образом.