1

次のようなデータベースから返されたレコードがあります。

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])の場所に複数を実行せずにリストを作成できますか?

それが明確であることを願っていますが、必要に応じてより多くの情報を提供させていただきます。

4

1 に答える 1

4
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]))
于 2013-03-16T13:54:35.830 に答える