небольшой рефакторинг кода Python - PullRequest
0 голосов
/ 12 мая 2010

У меня есть этот кусок кода, который, на мой взгляд, довольно уродлив, и мне интересно, как это можно сделать лучше:

if dic.get(key, None) is None:
   dic[key] = None

Очки за элегантность; -)

Ответы [ 3 ]

10 голосов
/ 12 мая 2010
d.setdefault(key) # sets d[key] to None if key is not in d
7 голосов
/ 12 мая 2010
if key not in dic:
    dic[key] = None

Это может быть не так коротко, как код Оливье, но, по крайней мере, это явно и быстро.

Пожалуйста, не используйте dict в качестве имени переменной, оно встроено в тени.

3 голосов
/ 12 мая 2010
import collections

mydict = collections.defaultdict(lambda: None)

Теперь любой доступ к mydict[akey] (если akey не присутствовал в качестве ключа в mydict) установил mydict[akey] на None в качестве побочного эффекта.

Обратите внимание, что инициализатор defaultdict требует вызова без аргументов, откуда lambda.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...