or
не работает так. (Это может быть наиболее часто задаваемый вопрос Python на StackOverflow, но, к сожалению, его очень сложно найти, если вы уже не знаете, в чем проблема ...) or
просто принимает два булевых выражения и возвращает что-то правдоподобное, если любое из них правдиво. то, что вы просите, является ли "b"
правдой (это), или "c" in xyz.get("a", {})
является правдивым (это может быть или не быть, но Python даже не нужно проверять), поэтому он возвращает вам "b"
, что является правдой.
Возможно, вы можете исправить это с помощью круглых скобок ("b" or "c") in xyz.get("a", {})
, но это так же плохо. Сначала он будет оценивать ("b" or "c")
и получить "b"
, тогда он проверяет, находится ли это в dict, игнорируя "c"
.
Причина, по которой эквивалентное предложение имеет смысл на английском языке, заключается в том, что вы неявно спрашиваете: «это b в dict или c в dict»; Python не позволит вам оставить это неявный, но вы всегда можете сделать это явно:
"b" in xyz.get("a", {}) or "c" in xyz.get("a", {})`
Если вы хотите сделать больше, чем 2 из них (или, если они только известны динамически), то вы будете хотите использовать any
и/или хранить xyz.get("a", {})
во временной переменной вместо повторения, как в ответе utdemir, или, может быть, даже лучше, используя набор, как в ответе Кастры.
'или' не работает; это может быть наиболее часто задаваемый вопрос Python в StackOverflow. Вы можете просто сделать «b» в xyz.get («a», {}) или «c» в xyz.get («a», {}) '. – abarnert