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

В Python, как я прокручиваю словарь и изменяю значение, если оно что-то равняется?

Если значение "Нет", я хотел бы изменить его на "" (пустая строка).

Я начинаю так, но я забываю:

for k, v in mydict.items():
    if v is None:
... right?
4b9b3361

Ответ 1

for k, v in mydict.iteritems():
    if v is None:
        mydict[k] = ''

В более общем случае, например, если вы добавляете или удаляете ключи, может быть небезопасно изменять структуру контейнера, на котором вы работаете с циклом, - поэтому было бы разумно использовать items для зацикливания в независимой копии списка. но присвоение другого значения для данного существующего индекса не вызывает никаких проблем, поэтому в Python 2.any лучше использовать iteritems.

Однако в Python3 код выдает AttributeError: 'dict' object has no attribute 'iteritems' ошибки AttributeError: 'dict' object has no attribute 'iteritems'. Используйте items() вместо iteritems() здесь.

Обратитесь к этому сообщению.

Ответ 2

Вы можете создать определение dict только элементов, значения которых равны None, а затем обновить их обратно в оригинал:

tmp = dict((k,"") for k,v in mydict.iteritems() if v is None)
mydict.update(tmp)

Обновить - выполнили некоторые тесты производительности

Ну, после того, как вы пробовали дикты от 100 до 10000 элементов с переменным процентом значений None, производительность решения Alex почти вдвое быстрее, чем это решение.

Ответ 3

Понимание, как правило, происходит быстрее, и это имеет то преимущество, что не редактирование mydict во время итерации:

mydict = dict((k, v if v else '') for k, v in mydict.items())