繁体   English   中英

Python itertools.groupby多个值

[英]Python itertools.groupby multiple values

我有从数据库返回的记录,如下所示:

region       month_taken         total_att num_classes
Colorado    2013-01-01 00:00:00.000 78485   4648
Colorado    2013-02-01 00:00:00.000 71769   4162
Midwest     2013-01-01 00:00:00.000 110508  7101
Midwest     2013-02-01 00:00:00.000 103545  6410

我正在尝试将它们按如下方式放入列表中:

Total_att:

[{"data": [78485, 71769], "name": "Colorado"}, {"data": [110508, 103545], "name": "Midwest"}]

num_classes:

[{"data": [4648, 4162], "name": "Colorado"}, {"data": [7101, 6410], "name": "Midwest"}]

我发现了itertools.groupby可以满足我的要求,但是我很难用一个以上的值列表来完成它(因为缺少更好的术语)。

totalResults = []            
for key, location in groupby(rows, lambda k: k[0]):
    totalRow = dict()
    totalRow['name'] = key
    totalRow['data'] = [x[2] for x in location]
    totalResults.append(totalRow)

太好了,这使我获得了total_att列表,但是随后我又进行了一个完整的groupby循环来创建“ num_classes”列表,这似乎很荒谬。 我在文档中看到了这一点,但老实说,如果我将其转换为列表,我不太确定这意味着什么或如何处理我的问题:

The returned group is itself an iterator that shares the underlying iterable with groupby(). Because the source is shared, when the groupby() object is advanced, the previous group is no longer visible. So, if that data is needed later, it should be stored as a list:

因此,如何在不对groupby(rows,lambda k:k [0]):中的键,位置进行多次处理的情况下创建列表?

我希望这一点很清楚,但很高兴在必要时提供更多信息。

totalResults = [] 
totalClasses = []           
for key, location in groupby(rows, lambda k: k[0]):
    location = list(location)
    totalResults.append(dict(name=key, data=[x[2] for x in location]))
    totalClasses.append(dict(name=key, data=[x[3] for x in location]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM