2012-06-22 59 views
1

我是比較新的web2py的,以及具有這種功能的問題:錯誤使用lambda排序

sorted_rows = day_rows.sort(lambda r: r.inspection) 

這將導致錯誤:

<type 'exceptions.TypeError'> <lambda>() takes exactly 1 argument (2 given) 

day_rows是從數據庫中結果選擇並且在這種情況下具有大約20行。

我明顯錯過了基本的東西,但我無法弄清楚。我將不勝感激任何幫助。

感謝, 約翰

回答

3

我猜你轉換day_rows到詞典列表(所以它不再是一個DAL行對象),或者做類似db(db.mytable).select().as_list()。在這種情況下,您正在調用標準Python list對象的sort()方法,其中第二個參數爲「cmp」,其中有兩個參數。如果你想保持day_rows作爲一個列表,你可以這樣做:

day_rows.sort(key=lambda r: r['inspection']) 

雖然這將整理到位的列表,而不是返回一個新的列表。如果你想有一個新的列表,這樣做:

sorted_rows = sorted(day_rows, key=lambda r: r['inspection']) 

否則,請day_rows作爲DAL Rows對象,你原來的代碼應工作。

+0

是的,你的建議工作完美。現在我會回頭想一想DAL Rows對象的變化。這對我來說並不是很明顯。非常感謝您的幫助。 Web2py功能非常強大,有一條學習曲線...... – johnz

+0

您可以顯示day_rows的創建代碼以及任何代碼嗎?你使用'executeql()'嗎? – Anthony

+1

事實上,我的確在做一些改爲行列表的事情 - 當我今天早上重新審視它時顯而易見。你的迴應使我瞭解它。 – johnz