这是基本代码:
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 : [ ... ]
}
最佳答案
而不是
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))
}
编辑:您可能需要对 this_month 进行预先排序,以便成绩按升序排列(或者至少使与给定字母对应的所有成绩一起出现)。
关于python - 从 groupby 返回类似字典的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22840706/