Я имею этот кусок кода, который, по моему мнению, является довольно некрасиво и мне интересно, как это можно сделать лучше:небольшой код питона рефакторинг
if dic.get(key, None) is None:
dic[key] = None
Очки элегантности ;-)
Я имею этот кусок кода, который, по моему мнению, является довольно некрасиво и мне интересно, как это можно сделать лучше:небольшой код питона рефакторинг
if dic.get(key, None) is None:
dic[key] = None
Очки элегантности ;-)
if key not in dic:
dic[key] = None
Это может быть не так коротким, как код Оливье, но, по крайней мере, он явный и быстрый.
Пожалуйста, не используйте dict
в качестве имени переменной, это тени.
d.setdefault(key) # sets d[key] to None if key is not in d
import collections
mydict = collections.defaultdict(lambda: None)
Теперь, любой доступ к mydict[akey]
будет (если akey
не присутствовал в качестве ключа в mydict
) установите mydict[akey]
в None
в качестве побочного эффекта.
Учтите, что инициализатор defaultdict
требует использования аргументов без аргументов, откуда lambda
.
Вам не нужно иметь 'None' там явно, аргумент' default' по умолчанию равен 'None' – SilentGhost
@SilentGhost: Хе-хе, я понял это и изменил свой ответ точно в то же время, когда вы пишете комментарий. :-) –
Это * значительно * быстрее, чем любой другой метод, поскольку он реализует проверку на C и, таким образом, позволяет избежать всего временного подсчета ссылок. –