次のようなデータベースから返されたレコードがあります。
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])の場所に複数を実行せずにリストを作成できますか?
それが明確であることを願っていますが、必要に応じてより多くの情報を提供させていただきます。