В Python, как я прокручиваю словарь и изменяю значение, если оно что-то равняется?
Если значение "Нет", я хотел бы изменить его на "" (пустая строка).
Я начинаю так, но я забываю:
for k, v in mydict.items():
if v is None:
... right?
Ответ 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() здесь.
Вы можете создать определение 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())