【发布时间】:2013-11-25 06:54:13
【问题描述】:
我有一组属性。其中一些属性给出了评论分数。评论保存在 AggregateReview 表中。我必须根据它们的分数对这些属性进行排序。评分最高的房产将排在第一位。当所有有评分的房产将被排序时,我必须附加那些没有被评论的房产。 这是我编写的代码,它工作正常......但我想知道这段代码中有什么可以优化的,我是应用引擎和 ndb 的新手,所以任何帮助将不胜感激。 (我认为对 db 的调用太多了)...
sortedProperties = []
sortedProperties.extend(sorted([eachProperty for eachProperty in properties if AggregateReview.query(AggregateReview.property == eachProperty.key).get()],key=lambda property: AggregateReview.query(AggregateReview.property == property.key).get().rating,reverse=True))
sortedProperties.extend([eachProperty for eachProperty in properties if AggregateReview.query(AggregateReview.property == eachProperty.key).get() is None])
return sortedProperties
经过一番变通后,我想到了这个:
return sorted(properties,key=lambda property: property.review_aggregate.get().average,reverse=True)
但它会引发错误: “NoneType”对象没有“平均”属性
因为它无法找到每个属性的 review_aggregate。我希望它接受 None....
【问题讨论】:
-
你的代码行太长了™
标签: python google-app-engine app-engine-ndb