2016-07-09 3 views
-1

У меня есть один словарь, как следующее:Как не пройти тест if?

adict = {'1': alist, '0': blist, '2': clist} 

Я хочу, чтобы выполнить некоторые вещи для всех списков в adict кроме списка с ключом «0».

Так что я пробовал:

for key in adict: 
    if key is not '0': 
     do something 

но тест оленья кожа работа, что-то делается во всех случаях, в том числе тот, что ключ == «0».

Я не могу понять, что не так, любая помощь?

+2

Этот код отлично подходит для меня и переходит в «делать что-то» только для 'alist' и' clist'. Вы уверены, что не переносите что-то в переводе на простой пример для нас? – Jeff

+0

Модифицированный код (сделайте что-нибудь как распечатку и некоторые фиктивные списки для реального). В любом случае вам нужно проверить условие значения с помощью '! =' Или '==' в паре с продолжением. Как @JeffL. предлагает, пожалуйста, обновить вопрос с помощью менее «отредактированного» кода, который также вызывает ошибку вашей системы. Благодарю. – Dilettant

ответ

6

is тест на равенство объектов, а не на равенство. Итак, вы смотрите здесь, если key - это тот же самый строковый объект, что и литерал '0', который вы вводите следующим образом, а не имеет ли значение строки одинаковое значение. Вероятно, вы должны проверить не равные значения, например

if key != '0': 
    <do something> 
+0

Это правильно, и люди должны быть осторожны с 'is' и' == ', но в Python 2.7 способ, которым он это сделал, должен оценивать то, что он ожидает. То есть, ''0' == '0'' и'' 0 'равно' 0 ', оба являются истинными. Мне интересно, может ли он смешивать дтипы. – Jeff

+0

@JeffL. да, я был удивлен, что ОП сообщил, что это не сработало для «0», так что, возможно, что-то еще глубже происходит –

Смежные вопросы