gpt4 book ai didi

Python itertools.groupby 多个值

转载 作者:行者123 更新时间:2023-12-01 05:47:59 24 4
gpt4 key购买 nike

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

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

我试图将它们放入列表中:

总计:

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

类数:

[{"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”列表,这看起来很荒谬。我在文档中看到了这一点,但老实说,我不太确定这意味着什么,或者如果我将其转换为列表如何处理我的问题:

返回的组本身就是一个迭代器,它与 groupby() 共享底层可迭代对象。因为源是共享的,所以当 groupby() 对象前进时,前一个组不再可见。因此,如果稍后需要该数据,则应将其存储为列表:

那么,如何在不执行多个 for key, location in 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]))

关于Python itertools.groupby 多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15450022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com