这是基本代码:
from my_parser import data
from itertools import groupby
from collections import Counter
def grades(date=datetime.now().strftime('%Y%m')):
this_month = self.data.key_by('GRADE').pop(date) # this gives a list of this month
monthly = dict(groupby(this_month, lambda k: make_letter(k.GRADE))) # group it by letter grade
c = [{
'month': k,
'total': len(x)
} for k,x in monthly.iteritems()]
然而,字典返回如下:
A : <itertools._grouper object at 0x1033f0c90>
C : <itertools._grouper object at 0x1033f0c50>
是否可以让它更像这样返回,或者使用其他工具来做同样的概念?
{
A : [ ... ]
B : [ ... ]
}
答案 0 :(得分:2)
而不是
monthly = dict(groupby(this_month, lambda k: make_letter(k.GRADE))) # group it by letter grade
试
monthly = {
val:list(items)
for val,items in
groupby(this_month, lambda k: make_letter(k.GRADE))
}
编辑:您可能需要对此__th进行预先排序,以使成绩按升序排列(或者至少使得与给定字母对应的所有成绩一起显示)。