擅长:python、mysql、java
<p><code>or</code>不是那样工作的。(这可能是关于StackOverflow的最常见的Python问题,但不幸的是,除非您已经知道问题所在……<code>or</code>只需要两个布尔表达式并返回truthy,如果其中任何一个是truthy,那么您要问的是<code>"b"</code>是否是truthy(它是),或者<code>"c" in xyz.get("a", {})</code>是真的(可能是真的,也可能不是真的,但是Python甚至不需要检查),所以它返回给您<code>"b"</code>,这是真的。你知道吗</p>
<p>你也许可以用括号来解决这个问题,<code>("b" or "c") in xyz.get("a", {})</code>,但那同样糟糕。首先计算<code>("b" or "c")</code>并得到<code>"b"</code>,然后检查dict中是否有,忽略<code>"c"</code>。你知道吗</p>
<p>在英语中,等价句之所以有意义,是因为你在含蓄地问“dict中是b还是c”;Python不会让你保持这种含蓄,但你总是可以让它显式化:</p>
<pre><code>"b" in xyz.get("a", {}) or "c" in xyz.get("a", {})`
</code></pre>
<p>如果您想做其中的两个以上(或者如果它们只是动态知道的),那么您将希望使用<code>any</code>,和/或将<code>xyz.get("a", {})</code>存储在一个临时变量中,而不是重复它,如在utdemir的答案中,或者,也许更好,使用一个集合,如在Kasra的答案中。你知道吗</p>