回答編集履歴

8

原因説明追記

2020/01/27 08:10

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,4 +1,8 @@
1
+ if文でkey_dateがなかったときしか処理してないのが原因です。あったときの処理も書きましょう。
2
+
3
+
4
+
1
- all関数かany関数を使うといいですよ。
5
+ all関数かany関数を使うとですよ。
2
6
 
3
7
  allなら「すべてにキーがない」、anyなら「notどれかにキーがある」=「どれにもキーがない」。
4
8
 

7

変数名変更

2020/01/27 08:10

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -44,9 +44,9 @@
44
44
 
45
45
  frames_list = []
46
46
 
47
- for i, row in enumerate(date_list):
47
+ for i, d in enumerate(date_list):
48
48
 
49
- key_date = f"{row['date']:%Y-%m-%d}"
49
+ key_date = f"{d['date']:%Y-%m-%d}"
50
50
 
51
51
  if all(key_date not in day_dict for day_dict in frames_list):
52
52
 
@@ -56,7 +56,7 @@
56
56
 
57
57
  frames_list.append(day_dict)
58
58
 
59
- day_dict[key_date].append({'id': row['id'], 'time': row['time']})
59
+ day_dict[key_date].append({'id': d['id'], 'time': d['time']})
60
60
 
61
61
  pprint(frames_list)
62
62
 
@@ -108,9 +108,9 @@
108
108
 
109
109
  frames_list = []
110
110
 
111
- for i, row in enumerate(date_list):
111
+ for i, d in enumerate(date_list):
112
112
 
113
- key_date = f"{row['date']:%Y-%m-%d}"
113
+ key_date = f"{d['date']:%Y-%m-%d}"
114
114
 
115
115
  for day_dict in frames_list:
116
116
 
@@ -126,6 +126,6 @@
126
126
 
127
127
  frames_list.append(day_dict)
128
128
 
129
- day_dict[key_date].append({'id': row['id'], 'time': row['time']})
129
+ day_dict[key_date].append({'id': d['id'], 'time': d['time']})
130
130
 
131
131
  ```

6

all/anyを使わない方法を追記

2020/01/27 08:04

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,6 +1,8 @@
1
- all関数かany関数を使いましょう
1
+ all関数かany関数を使うといですよ
2
2
 
3
3
  allなら「すべてにキーがない」、anyなら「notどれかにキーがある」=「どれにもキーがない」。
4
+
5
+ 使わない方法も最後に書いておきます。
4
6
 
5
7
 
6
8
 
@@ -95,3 +97,35 @@
95
97
  {'2020-01-29': [{'id': 109, 'time': '09:00'}, {'id': 110, 'time': '16:00'}]}]
96
98
 
97
99
  ```
100
+
101
+
102
+
103
+ all/any を使わない処理方法
104
+
105
+
106
+
107
+ ```python
108
+
109
+ frames_list = []
110
+
111
+ for i, row in enumerate(date_list):
112
+
113
+ key_date = f"{row['date']:%Y-%m-%d}"
114
+
115
+ for day_dict in frames_list:
116
+
117
+ if key_date in day_dict:
118
+
119
+ break
120
+
121
+ else:
122
+
123
+ print("{}:データ追加".format(i))
124
+
125
+ day_dict = {key_date: []}
126
+
127
+ frames_list.append(day_dict)
128
+
129
+ day_dict[key_date].append({'id': row['id'], 'time': row['time']})
130
+
131
+ ```

5

コメント削除

2020/01/27 07:58

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -44,11 +44,7 @@
44
44
 
45
45
  for i, row in enumerate(date_list):
46
46
 
47
- # キーとなる日付を設定
48
-
49
47
  key_date = f"{row['date']:%Y-%m-%d}"
50
-
51
-
52
48
 
53
49
  if all(key_date not in day_dict for day_dict in frames_list):
54
50
 
@@ -57,12 +53,6 @@
57
53
  day_dict = {key_date: []}
58
54
 
59
55
  frames_list.append(day_dict)
60
-
61
-
62
-
63
- # レコードの日付とkey_dateが一致したデータを格納して出力用リストに追加
64
-
65
- # 日付ごとのオブジェクトフォーマット(ID, 日付, 時間)
66
56
 
67
57
  day_dict[key_date].append({'id': row['id'], 'time': row['time']})
68
58
 

4

説明追記

2020/01/27 07:46

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,3 +1,9 @@
1
+ all関数かany関数を使いましょう。
2
+
3
+ allなら「すべてにキーがない」、anyなら「notどれかにキーがある」=「どれにもキーがない」。
4
+
5
+
6
+
1
7
  ```python
2
8
 
3
9
  import datetime

3

実行結果追記

2020/01/27 07:42

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -63,3 +63,39 @@
63
63
  pprint(frames_list)
64
64
 
65
65
  ```
66
+
67
+
68
+
69
+ 実行結果
70
+
71
+
72
+
73
+ ```
74
+
75
+ 0:データ追加
76
+
77
+ 5:データ追加
78
+
79
+ 9:データ追加
80
+
81
+ [{'2020-01-27': [{'id': 100, 'time': '09:00'},
82
+
83
+ {'id': 101, 'time': '10:00'},
84
+
85
+ {'id': 102, 'time': '14:00'},
86
+
87
+ {'id': 103, 'time': '18:00'},
88
+
89
+ {'id': 104, 'time': '20:00'}]},
90
+
91
+ {'2020-01-28': [{'id': 105, 'time': '11:00'},
92
+
93
+ {'id': 106, 'time': '15:00'},
94
+
95
+ {'id': 107, 'time': '18:00'},
96
+
97
+ {'id': 108, 'time': '22:00'}]},
98
+
99
+ {'2020-01-29': [{'id': 109, 'time': '09:00'}, {'id': 110, 'time': '16:00'}]}]
100
+
101
+ ```

2

コード修正

2020/01/27 07:36

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1 +1,65 @@
1
+ ```python
2
+
3
+ import datetime
4
+
5
+ from pprint import pprint
6
+
7
+
8
+
1
- 間違えたので再編集します。
9
+ date_list = [
10
+
11
+ {'id': 100, 'date': datetime.date(2020, 1, 27), 'time': '09:00'},
12
+
13
+ {'id': 101, 'date': datetime.date(2020, 1, 27), 'time': '10:00'},
14
+
15
+ {'id': 102, 'date': datetime.date(2020, 1, 27), 'time': '14:00'},
16
+
17
+ {'id': 103, 'date': datetime.date(2020, 1, 27), 'time': '18:00'},
18
+
19
+ {'id': 104, 'date': datetime.date(2020, 1, 27), 'time': '20:00'},
20
+
21
+ {'id': 105, 'date': datetime.date(2020, 1, 28), 'time': '11:00'},
22
+
23
+ {'id': 106, 'date': datetime.date(2020, 1, 28), 'time': '15:00'},
24
+
25
+ {'id': 107, 'date': datetime.date(2020, 1, 28), 'time': '18:00'},
26
+
27
+ {'id': 108, 'date': datetime.date(2020, 1, 28), 'time': '22:00'},
28
+
29
+ {'id': 109, 'date': datetime.date(2020, 1, 29), 'time': '09:00'},
30
+
31
+ {'id': 110, 'date': datetime.date(2020, 1, 29), 'time': '16:00'},
32
+
33
+ ]
34
+
35
+
36
+
37
+ frames_list = []
38
+
39
+ for i, row in enumerate(date_list):
40
+
41
+ # キーとなる日付を設定
42
+
43
+ key_date = f"{row['date']:%Y-%m-%d}"
44
+
45
+
46
+
47
+ if all(key_date not in day_dict for day_dict in frames_list):
48
+
49
+ print("{}:データ追加".format(i))
50
+
51
+ day_dict = {key_date: []}
52
+
53
+ frames_list.append(day_dict)
54
+
55
+
56
+
57
+ # レコードの日付とkey_dateが一致したデータを格納して出力用リストに追加
58
+
59
+ # 日付ごとのオブジェクトフォーマット(ID, 日付, 時間)
60
+
61
+ day_dict[key_date].append({'id': row['id'], 'time': row['time']})
62
+
63
+ pprint(frames_list)
64
+
65
+ ```

1

間違えたので再編集中

2020/01/27 07:34

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,63 +1 @@
1
- ```python
2
-
3
- import datetime
4
-
5
-
6
-
7
- date_list = [
1
+ 間違えたので再編集します。
8
-
9
- {'id': 100, 'date': datetime.date(2020, 1, 27), 'time': '09:00'},
10
-
11
- {'id': 101, 'date': datetime.date(2020, 1, 27), 'time': '10:00'},
12
-
13
- {'id': 102, 'date': datetime.date(2020, 1, 27), 'time': '14:00'},
14
-
15
- {'id': 103, 'date': datetime.date(2020, 1, 27), 'time': '18:00'},
16
-
17
- {'id': 104, 'date': datetime.date(2020, 1, 27), 'time': '20:00'},
18
-
19
- {'id': 105, 'date': datetime.date(2020, 1, 28), 'time': '11:00'},
20
-
21
- {'id': 106, 'date': datetime.date(2020, 1, 28), 'time': '15:00'},
22
-
23
- {'id': 107, 'date': datetime.date(2020, 1, 28), 'time': '18:00'},
24
-
25
- {'id': 108, 'date': datetime.date(2020, 1, 28), 'time': '22:00'},
26
-
27
- {'id': 109, 'date': datetime.date(2020, 1, 29), 'time': '09:00'},
28
-
29
- {'id': 110, 'date': datetime.date(2020, 1, 29), 'time': '16:00'},
30
-
31
- ]
32
-
33
-
34
-
35
- frames_list = []
36
-
37
- for i, row in enumerate(date_list):
38
-
39
- # キーとなる日付を設定
40
-
41
- key_date = f"{row['date']:%Y-%m-%d}"
42
-
43
-
44
-
45
- if all(key_date not in day_dict for day_dict in frames_list):
46
-
47
- print(f"{i}:データ追加")
48
-
49
- day_dict = {key_date: []}
50
-
51
- frames_list.append(day_dict)
52
-
53
-
54
-
55
- # レコードの日付とkey_dateが一致したデータを格納して出力用リストに追加
56
-
57
- # 日付ごとのオブジェクトフォーマット(ID, 日付, 時間)
58
-
59
- day_dict[key_date].append({'id': row['id'], 'time': row['time']})
60
-
61
- print(frames_list)
62
-
63
- ```