从groupby返回类似dict的结构

时间:2014-04-03 14:26:16

标签: python python-2.7

这是基本代码:

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 : [ ... ]
}

1 个答案:

答案 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进行预先排序,以使成绩按升序排列(或者至少使得与给定字母对应的所有成绩一起显示)。