Python dict.get возвращает 0, оцененный как ложный - PullRequest
2 голосов
/ 12 марта 2020

Я использую dict.get() в условных выражениях, чтобы проверить, существует ли что-то в пользовательских словарях (обычно из конфигурационных файлов yaml или json). Это хорошо сработало для меня, но у меня есть такой крайний случай:

my_dict = {
    'my_key': 0.0
}

if my_dict.get('my_key'):
    # do some stuff

Здесь 'my_key' существует в словаре, поэтому get не вернет None. Однако, поскольку 0.0 рассматривается как False в условных выражениях, это не работает так, как в большинстве случаев. Я могу исправить это:

if my_dict.get('my_key') is not None:
    # do some stuff

, но это кажется мне многословным. Для одного условия это не имеет большого значения, но объединение нескольких условий может быстро стать немного раздражающим.

Мой вопрос прост: есть ли менее подробный способ сделать это?

1 Ответ

3 голосов
/ 12 марта 2020

Нет, не менее многословно это делать с .get(). Все числа с нулевым значением, пустые последовательности или None будут оцениваться как False. Если вы хотите провести различие между ними, вам придется явно проверить None.

Но как @mingaleg упоминается в комментариях. Если вы используете его только для проверки наличия ключа в словаре, вы можете использовать if 'my_key' in my_dict:

...