Одиночная строка кода для проверки ключа в двумерном вложенном внутреннем словаре
Есть ли один метод линии, чтобы проверить, имеет ли Python 2d dict внутренний ключ/значение?
Сейчас я делаю что-то вроде этого:
if d.has_key(k1):
if d[k1].has_key(k2):
# do something
Есть ли лучший способ сделать это?
Спасибо
Ответ 1
if k2 in d.get(k1, {}):
# do something
Вышеприведенный фрагмент хорош, если вам все равно, существует ли k1 на самом деле или нет, и просто хотите знать, существует ли k2 внутри него, если он существует. Как вы можете видеть из моего фрагмента кода, я предпочитаю оператор in, но вы можете так же легко сказать
if d.get(k1, {}).has_key(k2):
# do something
если вы предпочитаете эту идиому, но метод has_key устарел в Python 3.x, поэтому вам, вероятно, следует избегать его.
У меня недостаточно репутации для комментариев, но обратите внимание, что верхнее предложение не будет выполнено, если значение key1 равно None.
if k2 in d.get(k1, {}):
# do something
не работает, если d = {'k1': None} поэтому не забудьте указать значение ваших ключей.
Ответ 4
if d.has_key(k1) and d[k1].has_key(k2):
Ответ 5
Ответ на ваш первый вопрос: да. Я считаю, что ответ Эли
if k2 in d.get(k1, {}):
лучший один лайнер, так как он избегает поиска k1 в d дважды. Ответ на ваш второй вопрос зависит от того, что вы хотите сделать, если сбой теста, и если вы хотите сделать что-то другое в двух случаях отказа. Если да:
try:
d1 = d[k1]
if k2 in d1:
<both tests passed>
else:
<second test failed>
except KeyError:
<first test failed>
Ответ 6
Не используйте has_key() использовать get(), поскольку has_key() устарел в python 3.x: