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

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

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

for k, v in mydict.items():
    if v is None:
... right?
67
задан TIMEX 23 February 2010 в 01:19
поделиться

3 ответа

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

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

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

См. этот пост.

125
ответ дан 24 November 2019 в 14:33
поделиться

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

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

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

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

14
ответ дан 24 November 2019 в 14:33
поделиться

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

mydict = dict((k, v if v else '') for k, v in mydict.items())
8
ответ дан 24 November 2019 в 14:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: