更新:问题已经修改,可以在大型代码示例前后阅读更多信息。你知道吗
考虑以下搜索词列表:
searchterms = {'term1': address, 'term2': name, 'term3': 'coordinates'}
所有人都可以是“南”(np.nan公司或者包含一些有效的搜索项。你知道吗
假设我有一个函数:
def askGoogle(term):
# return query result or skip to next
如果term1是nan
或server返回NotFound
,那么如何以最佳和最有效的方式从term1开始-尝试下一个,直到一个返回结果或全部返回nan
或NotFound
。你知道吗
到目前为止,我已经结束了一个巨大的如果elif else块的恐怖(我会节省你的麻烦,它是7级深)。你知道吗
我对python还不熟悉,但这不是有一些简单的方法吗?也许是递归函数?你知道吗
注意:我试着搜索这里和谷歌,但我真的不知道要搜索什么。你知道吗
编辑:nan
来自pd.DataFrame
(np.nan
)并且NotFound
(实际上,它是"ZERO_RETURNS"
),如果搜索项没有给出任何信息,则从服务器返回。上面说得不对,但必须按顺序审理这些条款。你知道吗
EDIT2:以下是我用开始的代码(为可读性而清理): 你知道吗
query = ''
if not term1 == 'nan' or not term2 == 'nan' or not term3 == 'nan' :
if not term1 == 'nan':
if not term2 == 'nan':
if not term3 == 'nan': # All found.
query = askGoogle(term1, self.queryParams(term1))
if query['status'] == 'NotFound':
query = askGoogle(term)
if query['status'] == 'NotFound':
query = askGoogle(term)
else:
query = askGoogle(term)
else:
query = askGoogle(term)
else: # Only term2 and term1 found.
query = askGoogle(term)
if query['status'] == 'NotFound':
query = askGoogle(term)
if query['status'] == 'NotFound':
query = askGoogle(term)
else:
query = askGoogle(term)
else:
if not term3 == 'nan': # Only term1 and term3 found.
query = askGoogle(term)
if term2
query = askGoogle(term)
else: # Only term1
term1 = askGoogle(term)
elif not term2 == 'nan': # Only term2 and term3 found.
if not term3 == 'nan':
term2 = askGoogle(term)
if not term2:
term3 = askGoogle(term)
else: # Only term2 found
term2 = askGoogle(term)
elif not term3 == 'nan': # term3 found
term3 = askGoogle(term)
else:
query = 'All terms this loop is exhausted, nothing found'
它显然不工作,我只是崩溃之前,我可以完成它。你知道吗
更新:我最初寻找的是一种直接在if
中设置变量的方法,我没有注意到:
if term = askGoogle(term) != 'ZERO_RESULTS':
return term
但是,这是使用python的not possible。 相反,在@alexbhandari的帮助下,我得到了以下代码:
import numpy as np
def askGoogle(self, type, terms):
query = ''
for term in terms:
if type == 1:
self.setParams(self.queryParams(term))
self.setCallType('textsearch')
elif type == 2:
self.setParams(self.detailsParams(term))
self.setCallType('placeid')
if term != np.nan:
query = json.loads(requests.get(url=self.url, params=self.params))
if query['status'] == 'OK':
break
return query
我可以使用以下方法调用:
resp = askGoogle(x, [term1, term2, term3])
注意:编号是为了区分不同类型的API调用。它在运行,我想我现在就知道了。你知道吗
您只需使用for循环遍历字典:
这将返回它到达的第一个搜索项。。否则它将返回
None
如果你只需要检查3个变量,我会使用If,else If块。结果很快。请注意,这假设您的askGoogle(term1,self.queryParams参数(term1))我从你的问题中得到了正确的答案,你已经把numpy作为np导入了。你知道吗
还要注意的是,这将为术语1至少运行一次askGoogle()。要解决这个问题,您必须将if语句拆分为所有三个术语的两个if。你知道吗
如果你能把term1,term2,term3放在一个列表中,我们就可以循环遍历这个列表,这样代码就短了一点。把所有的东西拼凑起来,我想到了这个。以下内容也已更新,以返回查询结果,而不是term1,因为此要求已添加到注释中。你知道吗
然后通过像这样传递列表
l
来调用方法askOracle(l)
旧答案(在问题修改之前,注释中澄清了未使用词典的事实):
首先,我想指出的是,在python中字典没有排序(在python3.6之前,正如@johnashu所指出的那样),因此不能按顺序遍历字典中的键和值,否则这可能是一个很好的解决方案。你知道吗
对于下面的答案,我假设当你说nan和notFound时,你的意思是字典包含字符串nan和notFound。如果您正在查找“term1”实际上是字典中的一个键还是完全丢失,可以在访问字典时用try,catch块替换If语句。你知道吗
相关问题 更多 >
编程相关推荐