Я пытаюсь создать словарь, который содержит серию наборов:
{Field1:{Value1, Value2, Value3}, Field2{Value4}}
Проблема, я затем хочу удалить любые поля из словаря, которые только имеют одно значение в наборе. Я был написанием кода как это:
for field in FieldSet:
if len(FieldSet[field]) == 1:
del(FieldSet[field])
Но получите ошибку "RuntimeError: словарь изменил размер во время выполнения". (Не удивление, так как это - то, что я делаю.) Это не самое важное и конец - все, если я должен столкнуть своего рода обходное решение, но действительно ли возможно сделать это?
Вместо этого итерируйте возвращаемое значение из .keys()
. Поскольку вы получаете список ключей, на него не повлияет изменение словаря после вызова.
Иногда предпочтительной альтернативой изменению FieldSet
на месте является (в зависимости от количества выполненных изменений) для создания нового и привязки его к существующему имени:
FieldSet = dict((k, v) for k, v in FieldSet.iteritems()
if len(v) != 1)