2013-11-25 53 views
-1

我有一個屬性的集合。這些屬性中的一些被賦予評論分數。評論保存在AggregateReview表中。我必須根據他們的分數對這些屬性進行排序。擁有最高評分的房產將排在第一位。當所有帶評語分數的房產將被排序時,我必須追加那些未經評論的房產。 這是我寫的代碼,它工作正常....但我想知道這個代碼中有什麼,可以優化,我是新的應用程序引擎和ndb,所以任何幫助將不勝感激。 (我覺得有那麼多的電話DB)...如何最小化ndb中的db調用並優化python代碼?

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 ....

+4

您的代碼行是太霸騰™ –

回答

0

我不確定你的代碼裏發生了什麼,老實說,因爲行很長。但我知道你可能想看看Memcached。它可以用來最小化數據庫上的命中,並被廣泛使用。它實際上內置於Google應用引擎中。閱讀文檔here