回答編集履歴

19

テキスト修正

2018/09/16 10:28

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -356,4 +356,10 @@
356
356
 
357
357
 
358
358
 
359
- 上記を勘案して言えることは、MOSMOS2さんがお使いの Pythonが、バージョン 3.7 より古いものでしたら、やはり`OrderedDict` を使っておくのが無難、ということになるかなと思います。
359
+       
360
+
361
+    
362
+
363
+
364
+
365
+  上記を勘案して言えることは、MOSMOS2さんがお使いの Pythonが、バージョン 3.7 より古いものでしたら、やはり`OrderedDict` を使っておくのが無難、ということになるかなと思います。自学自習で使う環境(たとえば自分の私物のPCなど)でしたら、Pythonをバージョンアップすることは自由にできますが、業務で何らかの本番環境のためのコードを書いていると、本番環境の言語処理系が必ずしも最新のものではない、ということはよくあることですので、ご自身の環境の要件に合わせて、Python 3.7 による新しい機能を使うか、もしくは `OrderedDict` を使うかを判断されるとよいかと思います。

18

テキスト修正

2018/09/16 10:28

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -164,7 +164,83 @@
164
164
 
165
165
 
166
166
 
167
+ コメントから頂きました
168
+
169
+
170
+
171
+ ```
172
+
173
+ MOSMOS2 2018/09/16 15:07
174
+
175
+
176
+
177
+ ありがとうございます。例えば、これを
178
+
179
+   
180
+
181
+ data2 = {
182
+
183
+ 'variable1': [0.0, 25.0, 50.0, 75.0],
184
+
185
+ 'variable2': [0.0],
186
+
187
+ 'variable3': [0.0, 30.0, 90.0, 60.0],
188
+
189
+ 'variable10': [0.0, 50.0, 100.0, 150.0],
190
+
191
+ 'variable11': [0.0],
192
+
193
+ 'variable12': [0.0, 30.0, 50.0, 70.0, 100.0],
194
+
195
+ 'variable13': [0.0],
196
+
197
+ 'variable14': [0.0],
198
+
199
+ 'variable15': [0.0],
200
+
201
+ 'variable16': [0.0],
202
+
203
+ 'variable17': [0.0],
204
+
205
+ 'variable18': [0.0],
206
+
207
+ 'variable19': [0.0, 0.0, 100.0, 200.0, 300.0],
208
+
209
+ 'variable20': [0.0],
210
+
211
+ 'variable21': [10.0, 20.0],
212
+
213
+ 'variable22': [70.0, 100.0, 150.0, 200.0, 250.0],
214
+
215
+ 'variable23': [5.0],
216
+
217
+ 'variable24': [30.0, 60.0, 90.0, 150.0],
218
+
219
+ 'variable25': [0.0, 70.0, 100.0, 120.0],
220
+
221
+ 'variable26': [0.0, 30.0],
222
+
223
+ 'variable27': [0.0, 8.0, 10.0, 12.0, 18.0],
224
+
225
+ 'variable28': [0.0, 8.0, 10.0, 12.0, 18.0],
226
+
227
+ 'variable29': [0.0, 6.0, 9.0, 11.0, 18.0],
228
+
229
+ 'variable30': [0.0],
230
+
231
+ 'variable31': [0.0]
232
+
233
+ }
234
+
235
+  
236
+
237
+ の形式が保管されるように、並べ替えたいと考えております。勉強不足で申し訳ありません。
238
+
239
+ ```
240
+
241
+
242
+
167
- 頂いたコメントに返答するために、あらためて詳細に踏み込んだ shimizukawa さんのご質問
243
+ に返答するために、あらためて詳細に踏み込んだ shimizukawa さんのご質問
168
244
 
169
245
 
170
246
 

17

テキスト修正

2018/09/16 08:39

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -160,7 +160,7 @@
160
160
 
161
161
 
162
162
 
163
- **追記**
163
+ **追記1**
164
164
 
165
165
 
166
166
 

16

テキスト修正

2018/09/16 08:33

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -164,7 +164,7 @@
164
164
 
165
165
 
166
166
 
167
- 頂いたコメントに返答するために、あらためて shimizukawa さんの貴重なご質問
167
+ 頂いたコメントに返答するために、あらためて詳細に踏み込んだ shimizukawa さんのご質問
168
168
 
169
169
 
170
170
 
@@ -178,7 +178,7 @@
178
178
 
179
179
 
180
180
 
181
- **OrderedDictを使って順序つきキーの辞書を作成:** [https://trinket.io/python/13d9e0c27c](https://trinket.io/python/13d9e0c27c)
181
+ - **OrderedDictを使って順序つきキーの辞書を作成:** [https://trinket.io/python/13d9e0c27c](https://trinket.io/python/13d9e0c27c)
182
182
 
183
183
 
184
184
 

15

テキスト修正

2018/09/16 08:25

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -277,3 +277,7 @@
277
277
 
278
278
 
279
279
  ```
280
+
281
+
282
+
283
+ 上記を勘案して言えることは、MOSMOS2さんがお使いの Pythonが、バージョン 3.7 より古いものでしたら、やはり`OrderedDict` を使っておくのが無難、ということになるかなと思います。

14

テキスト修正

2018/09/16 08:01

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -266,7 +266,7 @@
266
266
 
267
267
 
268
268
 
269
- sorted_data = dict()
269
+ data2 = dict()
270
270
 
271
271
 
272
272
 

13

テキスト修正

2018/09/16 07:55

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -266,7 +266,7 @@
266
266
 
267
267
 
268
268
 
269
- data2 = {};
269
+ sorted_data = dict()
270
270
 
271
271
 
272
272
 

12

テキスト修正

2018/09/16 07:54

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -204,7 +204,7 @@
204
204
 
205
205
 
206
206
 
207
- との一文がありました。ですので、 Python 3.7 を使うのであれば、以下のように書くことで、キーの順序が保持された dict である `sorted_data` を作成することができます。
207
+ との一文がありました。ですので、 Python 3.7 を使うのであれば、以下のように書くことで、キーの順序が保持された dict である `data2` を作成することができます。
208
208
 
209
209
 
210
210
 
@@ -266,13 +266,13 @@
266
266
 
267
267
 
268
268
 
269
- sorted_data = {};
269
+ data2 = {};
270
270
 
271
271
 
272
272
 
273
273
  for k, v in sorted(data.items(), key=lambda x: int(x[0].replace('variable', ''))):
274
274
 
275
- sorted_data[k] = v
275
+ data2[k] = v
276
276
 
277
277
 
278
278
 

11

テキスト修正

2018/09/16 07:50

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -192,7 +192,7 @@
192
192
 
193
193
 
194
194
 
195
- [docs.python.org/ja/3.7 - 4.10. マッピング型](https://docs.python.org/ja/3.7/library/stdtypes.html#mapping-types-dict)
195
+ [Python 3.7.0 ドキュメント - 4.10. マッピング型](https://docs.python.org/ja/3.7/library/stdtypes.html#mapping-types-dict)
196
196
 
197
197
 
198
198
 

10

テキスト修正

2018/09/16 07:46

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -179,3 +179,101 @@
179
179
 
180
180
 
181
181
  **OrderedDictを使って順序つきキーの辞書を作成:** [https://trinket.io/python/13d9e0c27c](https://trinket.io/python/13d9e0c27c)
182
+
183
+
184
+
185
+
186
+
187
+ ---
188
+
189
+
190
+
191
+ **追記2**
192
+
193
+
194
+
195
+ [docs.python.org/ja/3.7 - 4.10. マッピング型](https://docs.python.org/ja/3.7/library/stdtypes.html#mapping-types-dict)
196
+
197
+
198
+
199
+ の中に
200
+
201
+
202
+
203
+ > バージョン 3.7 で変更: 辞書の順序が挿入順序であることが保証されるようになりました。この振る舞いは CPython 3.6 の実装詳細でした。
204
+
205
+
206
+
207
+ との一文がありました。ですので、 Python 3.7 を使うのであれば、以下のように書くことで、キーの順序が保持された dict である `sorted_data` を作成することができます。
208
+
209
+
210
+
211
+ ```python
212
+
213
+ data = {
214
+
215
+ 'variable1': [0.0, 25.0, 50.0, 75.0],
216
+
217
+ 'variable10': [0.0, 50.0, 100.0, 150.0],
218
+
219
+ 'variable11': [0.0],
220
+
221
+ 'variable12': [0.0, 30.0, 50.0, 70.0, 100.0],
222
+
223
+ 'variable13': [0.0],
224
+
225
+ 'variable14': [0.0],
226
+
227
+ 'variable15': [0.0],
228
+
229
+ 'variable16': [0.0],
230
+
231
+ 'variable17': [0.0],
232
+
233
+ 'variable18': [0.0],
234
+
235
+ 'variable19': [0.0, 0.0, 100.0, 200.0, 300.0],
236
+
237
+ 'variable2': [0.0],
238
+
239
+ 'variable20': [0.0],
240
+
241
+ 'variable21': [10.0, 20.0],
242
+
243
+ 'variable22': [70.0, 100.0, 150.0, 200.0, 250.0],
244
+
245
+ 'variable23': [5.0],
246
+
247
+ 'variable24': [30.0, 60.0, 90.0, 150.0],
248
+
249
+ 'variable25': [0.0, 70.0, 100.0, 120.0],
250
+
251
+ 'variable26': [0.0, 30.0],
252
+
253
+ 'variable27': [0.0, 8.0, 10.0, 12.0, 18.0],
254
+
255
+ 'variable28': [0.0, 8.0, 10.0, 12.0, 18.0],
256
+
257
+ 'variable29': [0.0, 6.0, 9.0, 11.0, 18.0],
258
+
259
+ 'variable3': [0.0, 30.0, 90.0, 60.0],
260
+
261
+ 'variable30': [0.0],
262
+
263
+ 'variable31': [0.0]
264
+
265
+ }
266
+
267
+
268
+
269
+ sorted_data = {};
270
+
271
+
272
+
273
+ for k, v in sorted(data.items(), key=lambda x: int(x[0].replace('variable', ''))):
274
+
275
+ sorted_data[k] = v
276
+
277
+
278
+
279
+ ```

9

テキスト修正

2018/09/16 07:42

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -172,7 +172,9 @@
172
172
 
173
173
 
174
174
 
175
- とその回答を拝読したうえで、ここは定石通り `OrderedDict` を使っておく一手かなと思いました。以下、そのコードになります。
175
+ とその回答を拝読したうえで、 `OrderedDict` を使っておくのが無難かなと思いました。
176
+
177
+ 以下、そのコードになります。
176
178
 
177
179
 
178
180
 

8

テキスト修正

2018/09/16 07:10

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -153,3 +153,27 @@
153
153
 
154
154
 
155
155
  - **動作確認のためのサンプルコード:** [https://trinket.io/python/c5f7b9d7cf](https://trinket.io/python/c5f7b9d7cf)
156
+
157
+
158
+
159
+ ---
160
+
161
+
162
+
163
+ **追記**
164
+
165
+
166
+
167
+ 頂いたコメントに返答するために、あらためて shimizukawa さんの貴重なご質問
168
+
169
+
170
+
171
+ - [Python3.6でのdictのキー順維持と、hash randomizeによるDoS回避の関係について](https://teratail.com/questions/69286)
172
+
173
+
174
+
175
+ とその回答を拝読したうえで、ここは定石通り `OrderedDict` を使っておく一手かなと思いました。以下、そのコードになります。
176
+
177
+
178
+
179
+ **OrderedDictを使って順序つきキーの辞書を作成:** [https://trinket.io/python/13d9e0c27c](https://trinket.io/python/13d9e0c27c)

7

テキスト修正

2018/09/16 06:40

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,15 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- ご質問に
6
-
7
-
8
-
9
- > sortedなどを使っても、結局この順番になってしまいます。
10
-
11
-
12
-
13
- とありましたが、 以下のドキュメント
5
+ 以下のドキュメント
14
6
 
15
7
 
16
8
 

6

テキスト修正

2018/09/16 05:54

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -18,11 +18,11 @@
18
18
 
19
19
 
20
20
 
21
- にあるとおり、`sorted` を使う際ソートキーとして、もともとのデータのある部分だけをキーとして使ったり、加工したものをキーとして使うことができます。
21
+ にあるとおり、`sorted` を使う際ソートキーとして、もともとのデータのある部分だけをキーとして使ったり、加工したものをキーとして使うように指定することができます。
22
22
 
23
23
 
24
24
 
25
- このご質問の場合は、文字列`'variableN'` から得られる整数 `N`を使うように指定すればよいので、たとえば以下のようにすればよいかと思います。
25
+ このご質問の場合は、文字列`'variableN'` から得られる整数 `N`をソートキーに使うように指定すればよいので、たとえば以下のようにすればよいかと思います。
26
26
 
27
27
 
28
28
 

5

テキスト修正

2018/09/16 05:43

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -10,11 +10,19 @@
10
10
 
11
11
 
12
12
 
13
- とありましたが、 `sorted` を使う際にソーキーとして文字列`'variableN'` から得られる整数 `N`を使うように指定すればよいかと思います。
13
+ とありましたが、 以下のドキュメン
14
14
 
15
15
 
16
16
 
17
+ - 参考: [docs.python.jp/3: ソート HOW TO - Key関数 ](https://docs.python.jp/3/howto/sorting.html#key-functions)
18
+
19
+
20
+
17
- 以下サンプルコです。
21
+ にあるとおり`sorted` を使う際にソトキーとして、もともとのデータのある部分だけをキーとして使ったり、加工したものをキーとして使うことがきます。
22
+
23
+
24
+
25
+ このご質問の場合は、文字列`'variableN'` から得られる整数 `N`を使うように指定すればよいので、たとえば、以下のようにすればよいかと思います。
18
26
 
19
27
 
20
28
 

4

テキスト修正

2018/09/16 05:42

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,7 +2,19 @@
2
2
 
3
3
 
4
4
 
5
+ ご質問に
6
+
7
+
8
+
9
+ > sortedなどを使っても、結局この順番になってしまいます。
10
+
11
+
12
+
5
- `sorted` を使うときソートキーとして文字列`'variableN'` から得られる整数 `N`を使うように指定すればよいかと思います。以下、サンプルコードです。
13
+ とありましたが、 `sorted` を使うにソートキーとして文字列`'variableN'` から得られる整数 `N`を使うように指定すればよいかと思います。
14
+
15
+
16
+
17
+ 以下、サンプルコードです。
6
18
 
7
19
 
8
20
 

3

テキスト修正

2018/09/16 05:34

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 以下のように `sorted` を使、ソートキーとして文字列`'variableN'` から得られる整数 `N`を使うように指定すればよいかと思います。
5
+ `sorted` を使うときに、ソートキーとして文字列`'variableN'` から得られる整数 `N`を使うように指定すればよいかと思います。以下、サンプルコードです。
6
6
 
7
7
 
8
8
 

2

テキスト修正

2018/09/16 05:33

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 以下のように `sorted` を使、第2引数に文字列 `'variableN'` から得られる整数 `N`をソートキーとして使うようなlambdaを与えればよいかと思います。
5
+ 以下のように `sorted` を使い、ソートキーとして文字列`'variableN'` から得られる整数 `N`を使うように指定すればよいかと思います。
6
6
 
7
7
 
8
8
 

1

テキスト修正

2018/09/16 05:29

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -131,3 +131,13 @@
131
131
  variable31: [0.0]
132
132
 
133
133
  ```
134
+
135
+   
136
+
137
+   
138
+
139
+ 上記のコードは以下にて動作確認することができます。
140
+
141
+
142
+
143
+ - **動作確認のためのサンプルコード:** [https://trinket.io/python/c5f7b9d7cf](https://trinket.io/python/c5f7b9d7cf)