Скажем, у меня есть словарь, и я хочу проверить, сопоставлен ли ключ непустому значению.Одним из способов сделать это может быть функция len:
mydict = {"key" : "value", "emptykey" : ""}
print "True" if len(mydict["key"]) > 0 else "False" # prints true
print "True" if len(mydict["emptykey"]) > 0 else "False" # prints false
Однако можно полагаться на семантику Python и то, как, если объект определен, он оценивается как true и пропускает вызов len:
mydict = {"key" : "value", "emptykey" : ""}
print "True" if mydict["key"] else "False" # prints true
print "True" if mydict["emptykey"] else "False" # prints false
Тем не менее, я не уверен, что является более Pythonic.Первый чувствует, что «явный лучше, чем неявный», однако второй чувствует, что «простой - лучше, чем сложный».
Мне также интересно, может ли пропущенный вызов len укусить меня, как дикту, с которым я работаюне обязательно содержит строки, но может содержать другие типы (списки, наборы и т. д.).OTOH, в первом (с вызовом len), если None будет сохранен как значение, код будет взорван, тогда как non-len версия будет работать как положено (будет иметь значение false).
Какая версия являетсябезопаснее и больше Pythonic?
Редактировать: уточняющие предположения: я знаю ключ в словаре, и я знаю, что значения будут пригодны для использования.Я также не могу избежать ввода значений нулевой длины в словарь.
Правка № 2: Кажется, что люди упускают смысл моего вопроса.Я не пытаюсь определить самый Pythonic / самый безопасный способ проверки наличия ключа в словаре, я пытаюсь проверить, имеет ли значение нулевой длины или нет