teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

19

テキスト修正

2018/09/16 10:28

投稿

jun68ykt
jun68ykt

スコア9058

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

18

テキスト修正

2018/09/16 10:28

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -81,8 +81,46 @@
81
81
 
82
82
  **追記1**
83
83
 
84
- 頂いたコメントに返答するために、あらためて詳細に踏み込んだ shimizukawa さんのご質問
84
+ コメント頂きまし
85
85
 
86
+ ```
87
+ MOSMOS2 2018/09/16 15:07
88
+
89
+ ありがとうございます。例えば、これを
90
+   
91
+ data2 = {
92
+ 'variable1': [0.0, 25.0, 50.0, 75.0],
93
+ 'variable2': [0.0],
94
+ 'variable3': [0.0, 30.0, 90.0, 60.0],
95
+ 'variable10': [0.0, 50.0, 100.0, 150.0],
96
+ 'variable11': [0.0],
97
+ 'variable12': [0.0, 30.0, 50.0, 70.0, 100.0],
98
+ 'variable13': [0.0],
99
+ 'variable14': [0.0],
100
+ 'variable15': [0.0],
101
+ 'variable16': [0.0],
102
+ 'variable17': [0.0],
103
+ 'variable18': [0.0],
104
+ 'variable19': [0.0, 0.0, 100.0, 200.0, 300.0],
105
+ 'variable20': [0.0],
106
+ 'variable21': [10.0, 20.0],
107
+ 'variable22': [70.0, 100.0, 150.0, 200.0, 250.0],
108
+ 'variable23': [5.0],
109
+ 'variable24': [30.0, 60.0, 90.0, 150.0],
110
+ 'variable25': [0.0, 70.0, 100.0, 120.0],
111
+ 'variable26': [0.0, 30.0],
112
+ 'variable27': [0.0, 8.0, 10.0, 12.0, 18.0],
113
+ 'variable28': [0.0, 8.0, 10.0, 12.0, 18.0],
114
+ 'variable29': [0.0, 6.0, 9.0, 11.0, 18.0],
115
+ 'variable30': [0.0],
116
+ 'variable31': [0.0]
117
+ }
118
+  
119
+ の形式が保管されるように、並べ替えたいと考えております。勉強不足で申し訳ありません。
120
+ ```
121
+
122
+ に返答するために、あらためて詳細に踏み込んだ shimizukawa さんのご質問
123
+
86
124
  - [Python3.6でのdictのキー順維持と、hash randomizeによるDoS回避の関係について](https://teratail.com/questions/69286)
87
125
 
88
126
  とその回答を拝読したうえで、 `OrderedDict` を使っておくのが無難かなと思いました。

17

テキスト修正

2018/09/16 08:39

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -79,7 +79,7 @@
79
79
 
80
80
  ---
81
81
 
82
- **追記**
82
+ **追記1**
83
83
 
84
84
  頂いたコメントに返答するために、あらためて詳細に踏み込んだ shimizukawa さんのご質問
85
85
 

16

テキスト修正

2018/09/16 08:33

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -81,14 +81,14 @@
81
81
 
82
82
  **追記**
83
83
 
84
- 頂いたコメントに返答するために、あらためて shimizukawa さんの貴重なご質問
84
+ 頂いたコメントに返答するために、あらためて詳細に踏み込んだ shimizukawa さんのご質問
85
85
 
86
86
  - [Python3.6でのdictのキー順維持と、hash randomizeによるDoS回避の関係について](https://teratail.com/questions/69286)
87
87
 
88
88
  とその回答を拝読したうえで、 `OrderedDict` を使っておくのが無難かなと思いました。
89
89
  以下、そのコードになります。
90
90
 
91
- **OrderedDictを使って順序つきキーの辞書を作成:** [https://trinket.io/python/13d9e0c27c](https://trinket.io/python/13d9e0c27c)
91
+ - **OrderedDictを使って順序つきキーの辞書を作成:** [https://trinket.io/python/13d9e0c27c](https://trinket.io/python/13d9e0c27c)
92
92
 
93
93
 
94
94
  ---

15

テキスト修正

2018/09/16 08:25

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -137,4 +137,6 @@
137
137
  for k, v in sorted(data.items(), key=lambda x: int(x[0].replace('variable', ''))):
138
138
  data2[k] = v
139
139
 
140
- ```
140
+ ```
141
+
142
+ 上記を勘案して言えることは、MOSMOS2さんがお使いの Pythonが、バージョン 3.7 より古いものでしたら、やはり`OrderedDict` を使っておくのが無難、ということになるかなと思います。

14

テキスト修正

2018/09/16 08:01

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -132,7 +132,7 @@
132
132
  'variable31': [0.0]
133
133
  }
134
134
 
135
- sorted_data = dict()
135
+ data2 = dict()
136
136
 
137
137
  for k, v in sorted(data.items(), key=lambda x: int(x[0].replace('variable', ''))):
138
138
  data2[k] = v

13

テキスト修正

2018/09/16 07:55

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -132,7 +132,7 @@
132
132
  'variable31': [0.0]
133
133
  }
134
134
 
135
- data2 = {};
135
+ sorted_data = dict()
136
136
 
137
137
  for k, v in sorted(data.items(), key=lambda x: int(x[0].replace('variable', ''))):
138
138
  data2[k] = v

12

テキスト修正

2018/09/16 07:54

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -101,7 +101,7 @@
101
101
 
102
102
  > バージョン 3.7 で変更: 辞書の順序が挿入順序であることが保証されるようになりました。この振る舞いは CPython 3.6 の実装詳細でした。
103
103
 
104
- との一文がありました。ですので、 Python 3.7 を使うのであれば、以下のように書くことで、キーの順序が保持された dict である `sorted_data` を作成することができます。
104
+ との一文がありました。ですので、 Python 3.7 を使うのであれば、以下のように書くことで、キーの順序が保持された dict である `data2` を作成することができます。
105
105
 
106
106
  ```python
107
107
  data = {
@@ -132,9 +132,9 @@
132
132
  'variable31': [0.0]
133
133
  }
134
134
 
135
- sorted_data = {};
135
+ data2 = {};
136
136
 
137
137
  for k, v in sorted(data.items(), key=lambda x: int(x[0].replace('variable', ''))):
138
- sorted_data[k] = v
138
+ data2[k] = v
139
139
 
140
140
  ```

11

テキスト修正

2018/09/16 07:50

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -95,7 +95,7 @@
95
95
 
96
96
  **追記2**
97
97
 
98
- [docs.python.org/ja/3.7 - 4.10. マッピング型](https://docs.python.org/ja/3.7/library/stdtypes.html#mapping-types-dict)
98
+ [Python 3.7.0 ドキュメント - 4.10. マッピング型](https://docs.python.org/ja/3.7/library/stdtypes.html#mapping-types-dict)
99
99
 
100
100
  の中に
101
101
 

10

テキスト修正

2018/09/16 07:46

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -88,4 +88,53 @@
88
88
  とその回答を拝読したうえで、 `OrderedDict` を使っておくのが無難かなと思いました。
89
89
  以下、そのコードになります。
90
90
 
91
- **OrderedDictを使って順序つきキーの辞書を作成:** [https://trinket.io/python/13d9e0c27c](https://trinket.io/python/13d9e0c27c)
91
+ **OrderedDictを使って順序つきキーの辞書を作成:** [https://trinket.io/python/13d9e0c27c](https://trinket.io/python/13d9e0c27c)
92
+
93
+
94
+ ---
95
+
96
+ **追記2**
97
+
98
+ [docs.python.org/ja/3.7 - 4.10. マッピング型](https://docs.python.org/ja/3.7/library/stdtypes.html#mapping-types-dict)
99
+
100
+ の中に
101
+
102
+ > バージョン 3.7 で変更: 辞書の順序が挿入順序であることが保証されるようになりました。この振る舞いは CPython 3.6 の実装詳細でした。
103
+
104
+ との一文がありました。ですので、 Python 3.7 を使うのであれば、以下のように書くことで、キーの順序が保持された dict である `sorted_data` を作成することができます。
105
+
106
+ ```python
107
+ data = {
108
+ 'variable1': [0.0, 25.0, 50.0, 75.0],
109
+ 'variable10': [0.0, 50.0, 100.0, 150.0],
110
+ 'variable11': [0.0],
111
+ 'variable12': [0.0, 30.0, 50.0, 70.0, 100.0],
112
+ 'variable13': [0.0],
113
+ 'variable14': [0.0],
114
+ 'variable15': [0.0],
115
+ 'variable16': [0.0],
116
+ 'variable17': [0.0],
117
+ 'variable18': [0.0],
118
+ 'variable19': [0.0, 0.0, 100.0, 200.0, 300.0],
119
+ 'variable2': [0.0],
120
+ 'variable20': [0.0],
121
+ 'variable21': [10.0, 20.0],
122
+ 'variable22': [70.0, 100.0, 150.0, 200.0, 250.0],
123
+ 'variable23': [5.0],
124
+ 'variable24': [30.0, 60.0, 90.0, 150.0],
125
+ 'variable25': [0.0, 70.0, 100.0, 120.0],
126
+ 'variable26': [0.0, 30.0],
127
+ 'variable27': [0.0, 8.0, 10.0, 12.0, 18.0],
128
+ 'variable28': [0.0, 8.0, 10.0, 12.0, 18.0],
129
+ 'variable29': [0.0, 6.0, 9.0, 11.0, 18.0],
130
+ 'variable3': [0.0, 30.0, 90.0, 60.0],
131
+ 'variable30': [0.0],
132
+ 'variable31': [0.0]
133
+ }
134
+
135
+ sorted_data = {};
136
+
137
+ for k, v in sorted(data.items(), key=lambda x: int(x[0].replace('variable', ''))):
138
+ sorted_data[k] = v
139
+
140
+ ```

9

テキスト修正

2018/09/16 07:42

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -85,6 +85,7 @@
85
85
 
86
86
  - [Python3.6でのdictのキー順維持と、hash randomizeによるDoS回避の関係について](https://teratail.com/questions/69286)
87
87
 
88
- とその回答を拝読したうえで、ここは定石通り `OrderedDict` を使っておく一手かなと思いました。以下、そのコードになります。
88
+ とその回答を拝読したうえで、 `OrderedDict` を使っておくのが無難かなと思いました。
89
+ 以下、そのコードになります。
89
90
 
90
91
  **OrderedDictを使って順序つきキーの辞書を作成:** [https://trinket.io/python/13d9e0c27c](https://trinket.io/python/13d9e0c27c)

8

テキスト修正

2018/09/16 07:10

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -75,4 +75,16 @@
75
75
    
76
76
  上記のコードは以下にて動作確認することができます。
77
77
 
78
- - **動作確認のためのサンプルコード:** [https://trinket.io/python/c5f7b9d7cf](https://trinket.io/python/c5f7b9d7cf)
78
+ - **動作確認のためのサンプルコード:** [https://trinket.io/python/c5f7b9d7cf](https://trinket.io/python/c5f7b9d7cf)
79
+
80
+ ---
81
+
82
+ **追記**
83
+
84
+ 頂いたコメントに返答するために、あらためて shimizukawa さんの貴重なご質問
85
+
86
+ - [Python3.6でのdictのキー順維持と、hash randomizeによるDoS回避の関係について](https://teratail.com/questions/69286)
87
+
88
+ とその回答を拝読したうえで、ここは定石通り `OrderedDict` を使っておく一手かなと思いました。以下、そのコードになります。
89
+
90
+ **OrderedDictを使って順序つきキーの辞書を作成:** [https://trinket.io/python/13d9e0c27c](https://trinket.io/python/13d9e0c27c)

7

テキスト修正

2018/09/16 06:40

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,11 +1,7 @@
1
1
  こんにちは。
2
2
 
3
- ご質問に
3
+ 以下のドキュメント
4
4
 
5
- > sortedなどを使っても、結局この順番になってしまいます。
6
-
7
- とありましたが、 以下のドキュメント
8
-
9
5
  - 参考: [docs.python.jp/3: ソート HOW TO - Key関数 ](https://docs.python.jp/3/howto/sorting.html#key-functions)
10
6
 
11
7
  にあるとおり、`sorted` を使う際のソートキーとして、もともとのデータのある部分だけをキーとして使ったり、加工したものをキーとして使うように指定することができます。

6

テキスト修正

2018/09/16 05:54

投稿

jun68ykt
jun68ykt

スコア9058

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

5

テキスト修正

2018/09/16 05:43

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -4,11 +4,15 @@
4
4
 
5
5
  > sortedなどを使っても、結局この順番になってしまいます。
6
6
 
7
- とありましたが、 `sorted` を使う際にソートーとして文字列`'variableN'` から得られる整数 `N`を使うように指定すればよいかと思います。
7
+ とありましたが、 以下のドュメント
8
8
 
9
- 以下、サンプルコドです。
9
+ - 参考: [docs.python.jp/3: ソト HOW TO - Key関数 ](https://docs.python.jp/3/howto/sorting.html#key-functions)
10
10
 
11
+ にあるとおり、`sorted` を使う際にソートキーとして、もともとのデータのある部分だけをキーとして使ったり、加工したものをキーとして使うことができます。
11
12
 
13
+ このご質問の場合は、文字列`'variableN'` から得られる整数 `N`を使うように指定すればよいので、たとえば、以下のようにすればよいかと思います。
14
+
15
+
12
16
  ```python
13
17
  data = {
14
18
  'variable1': [0.0, 25.0, 50.0, 75.0],

4

テキスト修正

2018/09/16 05:42

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,8 +1,14 @@
1
1
  こんにちは。
2
2
 
3
- `sorted` を使うとき、ソートキーとして文字列`'variableN'` から得られる整数 `N`を使うように指定すればよいかと思います。以下、サンプルコードです。
3
+ ご質問
4
4
 
5
+ > sortedなどを使っても、結局この順番になってしまいます。
5
6
 
7
+ とありましたが、 `sorted` を使う際にソートキーとして文字列`'variableN'` から得られる整数 `N`を使うように指定すればよいかと思います。
8
+
9
+ 以下、サンプルコードです。
10
+
11
+
6
12
  ```python
7
13
  data = {
8
14
  'variable1': [0.0, 25.0, 50.0, 75.0],

3

テキスト修正

2018/09/16 05:34

投稿

jun68ykt
jun68ykt

スコア9058

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

2

テキスト修正

2018/09/16 05:33

投稿

jun68ykt
jun68ykt

スコア9058

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

1

テキスト修正

2018/09/16 05:29

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -64,4 +64,9 @@
64
64
  variable29: [0.0, 6.0, 9.0, 11.0, 18.0]
65
65
  variable30: [0.0]
66
66
  variable31: [0.0]
67
- ```
67
+ ```
68
+   
69
+   
70
+ 上記のコードは以下にて動作確認することができます。
71
+
72
+ - **動作確認のためのサンプルコード:** [https://trinket.io/python/c5f7b9d7cf](https://trinket.io/python/c5f7b9d7cf)