Заменить значение у ключа, если оно None

Есть словарь d, некоторые значения которого могут быть None. Как заменить определённое значение ключа k на v, если оно равно None?

d = {'k1': None, 'k2': 42}
k = 'k1'
v = 42

if d[k] is None:
    d[k] = v

Проблема в том, что тут 2 доступа по ключу. Можно ли сделать это за 1 доступ?


Ответы (1 шт):

Автор решения: Zhihar

вариант 1:

d[k] = v if d[k] is None else d[k]

вариант 2:

d = dict((key, v if key == k and value is None else value) for key, value in d.items())

вариант 2 хорош тем, что если ключ k отсутствует в словаре, то не будет ошибки, а для первого случая пришлось бы делать код:

if k in d:
    d[k] = v if d[k] is None else d[k]

или вообще:

if k in d and d[k] is None:
    d[k] = v
→ Ссылка