Подтвердить что ты не робот

Удалить определенные ключи из словаря в python

Я пытаюсь построить словарь, содержащий серию множеств:

{Field1:{Value1, Value2, Value3}, Field2{Value4}}

Проблема в том, что я хочу удалить любые слова из словаря, в котором есть только одно значение в наборе. Я пишу код следующим образом:

for field in FieldSet:
    if len(FieldSet[field]) == 1:
        del(FieldSet[field])

Но получите ошибку "RuntimeError: измененный размер словаря во время выполнения". (Не удивительно, с тех пор, что я делаю.) Это не все и все, если мне придется сбить какое-то обходное решение, но можно ли это сделать?

4b9b3361

Ответ 1

Итерации над возвращаемым значением из .keys(). Поскольку вы получаете список ключей назад, это не повлияет на изменение словаря после его вызова.

Ответ 2

Иногда предпочтительная альтернатива замене FieldSet на месте иногда (в зависимости от количества выполненных изменений), чтобы создать новую и привязать ее к существующему имени:

FieldSet = dict((k, v) for k, v in FieldSet.iteritems()
                if len(v) != 1)

Ответ 3

Существует метод pop. Он удаляет элемент, который вызывает ключ. Что касается вашего примера, это выглядит так:

for field in FieldSet.keys():
    if len(FieldSet[field]) == 1:
        FieldSet.pop(field)

Это в python 3.2, но я не уверен, что это новая функция: http://docs.python.org/dev/library/stdtypes.html#dict.pop

Просто попробовал, и он работает как рекламируемый.