Человек не хочет изменять словарь (или список) во время его циклического перемещения. Поэтому я создаю копию derivations
- new_derivations
и изменяю это new_derivations
:
import copy
new_derivations = copy.deepcopy(derivations)
for k, v in derivations.items():
for vi in v:
if (lista_ou_string(vi) and not set(vi).issubset(V1)) or vi not in V1:
if len(v) == 1:
# NEED TO DELETE BOTH KEY AND VALUE FROM derivatios.items()
del new_derivations[k]
break
else:
# NEED TO DELETE ONLY THE VALUE FROM derivations.items()
idx = new_derivations[k].index(vi)
del new_derivations[k][idx]
Я бы на самом деле реализовал приведенный выше код иначе: вместо того, чтобы думать об удалении элементов из derivations
, вместо того, чтобы думать, когда элемент должен быть добавлен в список. Тогда код становится намного проще:
new_derivations = {}
for k, v in derivations.items():
nv = [vi for vi in v if ((isinstance(vi, list) and set(vi).issubset(V1))
or vi in V1)]
if nv:
new_derivations[k] = nv