Проверка наличия ключа и его значение не является пустой строкой в ​​словаре Python - программирование
Подтвердить что ты не робот

Проверка наличия ключа и его значение не является пустой строкой в ​​словаре Python

Существует ли лучшая практика для назначения переменной из пары ключ/значение в словаре Python:

  • Если клавиша присутствует
  • Если значение ключа не является пустой строкой

Иначе назначить значение по умолчанию для переменной.

Я хотел бы использовать dict.get:

my_value = dict.get(key, my_default)

Но это присваивает пустой строке my_value, если ключ присутствует, а значение - пустая строка. Лучше ли использовать следующее:

if key in dict and dict[key]:
    my_value = dict[key]
else:
    my_value = my_default

Это использовало бы правдивость пустой строки, чтобы гарантировать, что для my_value были назначены только непустые строки.

Есть ли лучший способ выполнить эту проверку?

4b9b3361

Ответ 1

Возможно, вы имеете в виду что-то вроде:

a.get('foo',my_default) or my_default

который, как мне кажется, должен быть эквивалентен if-else условному, у вас есть

например.

>>> a = {'foo':''}
>>> a.get('foo','bar') or 'bar'
'bar'
>>> a['foo'] = 'baz'
>>> a.get('foo','bar') or 'bar'
'baz'
>>> a.get('qux','bar') or 'bar'
'bar'

Преимущества этого по сравнению с другой версией довольно ясны. Это хорошо, потому что вам нужно только выполнить поиск один раз и потому, что or коротких замыканий (как только он попадает в значение True, оно возвращает его. Если True-подобного значения не найдено, or возвращает второй).

Если ваше значение по умолчанию является функцией, его можно вызвать дважды, если вы напишете его как: d.get('foo',func()) or func(). В этом случае вам лучше использовать временную переменную для хранения возвращаемого значения func.

Ответ 2

Самый простой способ сделать то, что вы хотите:

my_value = dict.get(key) or my_default

or будет выдавать первое значение, если оно оценивает не false, иначе второе. В отличие от других языков Python не заставляет результат быть логическим, довольно полезным свойством иногда.