В Python, как мне пройти по словарю и изменить значение, если оно равно чему-то? - PullRequest
59 голосов
/ 23 февраля 2010

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

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

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

Ответы [ 3 ]

115 голосов
/ 23 февраля 2010
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'. Используйте items() вместо iteritems() здесь.

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

14 голосов
/ 23 февраля 2010

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

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

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

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

8 голосов
/ 23 февраля 2010

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

mydict = dict((k, v if v else '') for k, v in mydict.items())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...