Второе выражение if никогда не будет верным, потому что оно вложено в первое. Это означает, что он оценивается только в том случае, если внешний равен True. То же самое касается первого. Подумайте об этом:
Первый оператор if проверяет, равен ли keys
"header-name"
, а второй проверяет, снова ли keys
равен "ignore"
. Конечно, если оно имеет значение "header-name"
, оно также не будет "ignore"
.
Вам необходимо отложить вложенные операторы if:
for keys, values in value.items():
if keys == "header-name" and values == "x-frame-options":
print(keys,values)
if keys== "ignore" and values == False: # i dont reach here
print(keys,values)
if keys == "expected-value":
print(keys,values)
РЕДАКТИРОВАТЬ: Вам необходимо немного разделить свои проблемы. Одна часть логики c (та, что я привел здесь) предназначена только для определения того, на какой ключ вы смотрите. Затем вы можете go дальше делать вещи со значениями, которые они содержат:
ignoreItem = False # This variable is reset for every dictionary
for keys, values in value.items():
if keys== "ignore": # i dont reach here
ignoreItem = values
if keys == "expected-value" and ignoreItem:
print(keys,values)
Обратите внимание, как я сохранил значение "ignore"
, а затем в следующий раз, когда l oop обошел, я использовал это сохраненное значение, чтобы определить, буду ли я печатать "expected-value"
.
Кстати, вся эта структура немного странная. Если ключи словарей известны, почему бы не использовать их напрямую:
if value["header-name"] == "x-frame-options":
if value["ignore"] == False:
print(value["expected-value"]) # Do your stuff here