2012-11-09 29 views
0

我在我的數據庫中有一個名爲「item」的對象,我想寫一些python,它將從每組student_id中選擇最低分數....我是一個總數蟒蛇noob ...我怎麼做到這一點?有PYTHON在每個組中選擇最低分

運行我的代碼一些麻煩......我可以得到一些健全檢查完成:

{u'student_id': 197, u'_id': ObjectId('50906d7fa3c412bb040eb88d'), u'type': u'homework', u'score': 10.90872422518918} 
{u'student_id': 197, u'_id': ObjectId('50906d7fa3c412bb040eb88e'), u'type': u'homework', u'score': 88.3871242475841} 
{u'student_id': 198, u'_id': ObjectId('50906d7fa3c412bb040eb892'), u'type': u'homework', u'score': 17.46279901047208} 
{u'student_id': 198, u'_id': ObjectId('50906d7fa3c412bb040eb891'), u'type': u'homework', u'score': 76.18366499496366} 
{u'student_id': 199, u'_id': ObjectId('50906d7fa3c412bb040eb895'), u'type': u'homework', u'score': 49.34223066136407} 
{u'student_id': 199, u'_id': ObjectId('50906d7fa3c412bb040eb896'), u'type': u'homework', u'score': 58.09608083191365} 

更新?我得到這個錯誤...

NameError: name 'getResultFromDatabase' is not defined 

謝謝你的麻煩....這裏是我的代碼...

import pymongo 

from itertools import groupby 
from pymongo import Connection 

data = getResultFromDatabase() 
connection = Connection('localhost', 27017) 

db = connection.students 

item = db.grades.find({'type' : 'homework'}).sort([('student_id',pymongo.ASCENDING),('score',pymongo.ASCENDING)]) 



for id, items in groupby(data, lambda s: s['student_id']): 
    lowest_score = min(i['score'] for i in items) 

    print lowest_score 

回答

3

groupby你想要做什麼:

from itertools import groupby 

data = getResultFromDatabase() 

for id, items in groupby(data, lambda s: s['student_id']): 
    lowest_score_entry = min(items, key=lambda i: i['score']) 
    print lowest_score_entry['score'], lowest_score_entry['_id'] 
+0

+1。使用'groupby'時,OP應該注意的唯一事情是'data'必須由'student_id'排序(儘管如果示例具有代表性,它們可能已經是這樣)。 – DSM

+0

noob在這裏報告。得到這個錯誤:data = getResultFromDatabase() NameError:名稱'getResultFromDatabase'沒有定義 – thefonso

+0

我試圖pip安裝itertools ...啊哎呀...沒有工作 – thefonso