所以我不知道为什么,但我的程序似乎无法分辨r是否在结果中
我想知道这是否与对象有关
terms = query.split()
res = db.GqlQuery("SELECT * FROM Assignment ORDER BY created DESC")
results = []
for term in terms:
term.strip()
for r in res:
#WHY THE CRAP DOESNT THIS WORK....
#if r is in results... it still appends r to results
if term in r.name and r not in results:
results.append(r)
if r.tags:
if term in r.tags and r not in results:
results.append(r)发布于 2014-07-16 04:02:48
线
for r in res:在循环内
for term in terms:res是一个查询。所以当你打电话
for r in res:它真的在召唤
for r in res.run():因此,代码正在执行查询,每次通过外部循环获得一组新的结果。因此,这些新的结果对象与您可能在外部循环的前一次迭代中保存的结果对象不匹配。
您可以将"results = []“改为字典,并将实体的键用作字典中的键,然后进行比较检查。但是,在外部循环中多次执行此查询是非常低效的。
看起来,代码的目标是找出哪些赋值实体在Assignment.name或Assignment.tags属性中包含搜索项。如果是这样的话,那么我建议交换一些东西,然后做如下的事情:
terms = query.split()
assignments = db.GqlQuery("SELECT * FROM Assignment ORDER BY created DESC")
assignmentsWithTerms = []
for assignment in assignments:
for term in terms:
if term in assignment.name or (assignment.tags and term in assignment.tags):
assignmentsWithTerms.append(assignment)
continue这种方法只执行一次GqlQuery,因此它将更快、更便宜。此外,当您循环查看结果时,一旦找到第一个项,它就会将赋值添加到列表中,然后继续,再次使其更快。
我希望这能帮到你!
https://stackoverflow.com/questions/24764395
复制相似问题