<p>如果你只需要检查3个变量,我会使用If,else If块。结果很快。请注意,这假设您的askGoogle(term1,self.queryParams参数(term1))我从你的问题中得到了正确的答案,你已经把numpy作为np导入了。你知道吗</p>
<pre><code>def askOracle(term1, term2, term3):
if term1 != np.nan and askGoogle(term1, self.queryParams(term1)) != 'NotFound':
return term1
elif term1 != np.nan and askGoogle(term1, self.queryParams(term1)) != 'NotFound':
return term2
elif term1 != np.nan and askGoogle(term1, self.queryParams(term1)) != 'NotFound':
return term3
else:
return 'Nothing found'
</code></pre>
<p>还要注意的是,这将为术语1至少运行一次askGoogle()。要解决这个问题,您必须将if语句拆分为所有三个术语的两个if。你知道吗</p>
<pre><code>if term1 != np.nan:
return term1
elif askGoogle(term1, self.queryParams(term1)) != 'NotFound':
return term1
</code></pre>
<p>如果你能把term1,term2,term3放在一个列表中,我们就可以循环遍历这个列表,这样代码就短了一点。把所有的东西拼凑起来,我想到了这个。以下内容也已更新,以返回查询结果,而不是term1,因为此要求已添加到注释中。你知道吗</p>
<pre><code>l = [term1, term2, term3]
def askOracle(l):
for term in l:
if term != np.nan:
return askGoogle(term, self.queryParams(term))
query = askGoogle(term, self.queryParams(term))
if query != 'NotFound':
return query
return 'Nothing found'
</code></pre>
<p>然后通过像这样传递列表<code>l</code>来调用方法<code>askOracle(l)</code></p>
<p><strong>旧答案(在问题修改之前,注释中澄清了未使用词典的事实):</strong></p>
<p>首先,我想指出的是,在python中字典没有排序(在python3.6之前,正如@johnashu所指出的那样),因此不能按顺序遍历字典中的键和值,否则这可能是一个很好的解决方案。你知道吗</p>
<p>对于下面的答案,我假设当你说nan和notFound时,你的意思是字典包含字符串nan和notFound。如果您正在查找“term1”实际上是字典中的一个键还是完全丢失,可以在访问字典时用try,catch块替换If语句。你知道吗</p>
<pre><code>def askOracle(searchterms):
for i in range(1,4):
value = searchterms['term%d'%i]
if(value != 'nan' and value != 'NotFound'):
return value
return 'All elements nan or NotFound'
</code></pre>