Flaskにてテンプレートに出力用にSQLのクエリー結果を加工する際にユニークキーとして
日付をdictのキーとして、その他のデータをvalueにしたいのですが、
出力用のリストにキーとなる日付のdictオブジェクトがなければ の条件文
if not [d.get(key_date) for d in frames_list if key_date]:
がうまく機能しておりません
SQLクエリーのオブジェクト(date_list)
[ {'id': 100, 'date': datetime.date(2020, 1, 27), 'time': '09:00'}, {'id': 101, 'date': datetime.date(2020, 1, 27), 'time': '10:00'}, {'id': 102, 'date': datetime.date(2020, 1, 27), 'time': '14:00'}, {'id': 103, 'date': datetime.date(2020, 1, 27), 'time': '18:00'}, {'id': 104, 'date': datetime.date(2020, 1, 27), 'time': '20:00'}, {'id': 105, 'date': datetime.date(2020, 1, 28), 'time': '11:00'}, {'id': 106, 'date': datetime.date(2020, 1, 28), 'time': '15:00'}, {'id': 107, 'date': datetime.date(2020, 1, 28), 'time': '18:00'}, {'id': 108, 'date': datetime.date(2020, 1, 28), 'time': '22:00'}, {'id': 109, 'date': datetime.date(2020, 1, 29), 'time': '09:00'}, {'id': 110, 'date': datetime.date(2020, 1, 29), 'time': '16:00'}, ]
希望している出力結果
[ {'2020-01-27': [ {'id': 100, 'time': '09:00'}, {'id': 101, 'time': '10:00'}, {'id': 102, 'time': '14:00'}, {'id': 103, 'time': '18:00'}, {'id': 104, 'time': '20:00'} ]}, {'2020-01-28': [ {'id': 105, 'time': '11:00'}, {'id': 106, 'time': '15:00'}, {'id': 107, 'time': '18:00'}, {'id': 108, 'time': '22:00'} ]}, {'2020-01-29': [ {'id': 109, 'time': '09:00'}, {'id': 110, 'time': '16:00'}, ]} ]
pythonコード
python
1 # 最終出力用リスト 2 frames_list = [] 3 # クエリーレスポンスをリスト型辞書に格納 4 date_list = [dict(row) for row in frames] 5 print(date_list) # SQLクエリーレスポンス 6 7 for i,l in enumerate(date_list): 8 # キーとなる日付を設定 9 key_date = str(date_list[i]['date']) 10 11 # frames_listにkey_dateのキーとなる値が存在しなければデータ追加(※ここがうまくいってません) 12 if not [d.get(key_date) for d in frames_list if key_date]: 13 print("{}:データ追加".format(i)) 14 # 当日分のデータ格納雛形 15 days_list = [] 16 days_dict = {key_date: days_list} 17 # レコードの日付とkey_dateが一致したデータを格納して出力用リストに追加 18 for num in range(len(date_list)): 19 if key_date == str(date_list[num]['frame_date']): 20 # 日付ごとのオブジェクトフォーマット(ID, 日付, 時間) 21 data_list.append({'id': date_list[num]['id'], 'time': date_list[num]['time']}) 22 frames_list.append(days_dict) 23 print(frames_list) 24 25
実際の出力結果
[ {'2020-01-27': [ {'id': 100, 'time': '09:00'}, {'id': 101, 'time': '10:00'}, {'id': 102, 'time': '14:00'}, {'id': 103, 'time': '18:00'}, {'id': 104, 'time': '20:00'} ]} ]
1日分の格納はできたのですが、2日目以降の格納がうまくいきません。
どなたかご教示のほど、よろしくお願いいたします。
提示されたdate_listデータ内容と、ソースコードに相違があるようです。
(データ側に'frame_date'キー名がない)
可能であればソースコードにdata_list = [{'id': 100, ~」のように直接サンプルデータを埋め込んで
第三者が単体で実行可能なコードを提示されると回答得られやすいです。
回答2件
あなたの回答
tips
プレビュー