こんにちは。
以下のドキュメント
にあるとおり、sorted
を使う際のソートキーとして、もともとのデータのある部分だけをキーとして使ったり、加工したものをキーとして使うように指定することができます。
このご質問の場合は、文字列'variableN'
から得られる整数 N
をソートキーに使うように指定すればよいので、たとえば以下のようにすればよいかと思います。
python
1data = {
2 'variable1': [0.0, 25.0, 50.0, 75.0],
3 'variable10': [0.0, 50.0, 100.0, 150.0],
4 'variable11': [0.0],
5 'variable12': [0.0, 30.0, 50.0, 70.0, 100.0],
6 'variable13': [0.0],
7 'variable14': [0.0],
8 'variable15': [0.0],
9 'variable16': [0.0],
10 'variable17': [0.0],
11 'variable18': [0.0],
12 'variable19': [0.0, 0.0, 100.0, 200.0, 300.0],
13 'variable2': [0.0],
14 'variable20': [0.0],
15 'variable21': [10.0, 20.0],
16 'variable22': [70.0, 100.0, 150.0, 200.0, 250.0],
17 'variable23': [5.0],
18 'variable24': [30.0, 60.0, 90.0, 150.0],
19 'variable25': [0.0, 70.0, 100.0, 120.0],
20 'variable26': [0.0, 30.0],
21 'variable27': [0.0, 8.0, 10.0, 12.0, 18.0],
22 'variable28': [0.0, 8.0, 10.0, 12.0, 18.0],
23 'variable29': [0.0, 6.0, 9.0, 11.0, 18.0],
24 'variable3': [0.0, 30.0, 90.0, 60.0],
25 'variable30': [0.0],
26 'variable31': [0.0]
27}
28
29for k, v in sorted(data.items(), key=lambda x: int(x[0].replace('variable', ''))):
30 print(k + ": " + str(v))
上記を実行すると、以下が表示されます。
shell
1variable1: [0.0, 25.0, 50.0, 75.0]
2variable2: [0.0]
3variable3: [0.0, 30.0, 90.0, 60.0]
4variable10: [0.0, 50.0, 100.0, 150.0]
5variable11: [0.0]
6variable12: [0.0, 30.0, 50.0, 70.0, 100.0]
7variable13: [0.0]
8variable14: [0.0]
9variable15: [0.0]
10variable16: [0.0]
11variable17: [0.0]
12variable18: [0.0]
13variable19: [0.0, 0.0, 100.0, 200.0, 300.0]
14variable20: [0.0]
15variable21: [10.0, 20.0]
16variable22: [70.0, 100.0, 150.0, 200.0, 250.0]
17variable23: [5.0]
18variable24: [30.0, 60.0, 90.0, 150.0]
19variable25: [0.0, 70.0, 100.0, 120.0]
20variable26: [0.0, 30.0]
21variable27: [0.0, 8.0, 10.0, 12.0, 18.0]
22variable28: [0.0, 8.0, 10.0, 12.0, 18.0]
23variable29: [0.0, 6.0, 9.0, 11.0, 18.0]
24variable30: [0.0]
25variable31: [0.0]
上記のコードは以下にて動作確認することができます。
追記1
コメントから頂きました
MOSMOS2 2018/09/16 15:07
ありがとうございます。例えば、これを
data2 = {
'variable1': [0.0, 25.0, 50.0, 75.0],
'variable2': [0.0],
'variable3': [0.0, 30.0, 90.0, 60.0],
'variable10': [0.0, 50.0, 100.0, 150.0],
'variable11': [0.0],
'variable12': [0.0, 30.0, 50.0, 70.0, 100.0],
'variable13': [0.0],
'variable14': [0.0],
'variable15': [0.0],
'variable16': [0.0],
'variable17': [0.0],
'variable18': [0.0],
'variable19': [0.0, 0.0, 100.0, 200.0, 300.0],
'variable20': [0.0],
'variable21': [10.0, 20.0],
'variable22': [70.0, 100.0, 150.0, 200.0, 250.0],
'variable23': [5.0],
'variable24': [30.0, 60.0, 90.0, 150.0],
'variable25': [0.0, 70.0, 100.0, 120.0],
'variable26': [0.0, 30.0],
'variable27': [0.0, 8.0, 10.0, 12.0, 18.0],
'variable28': [0.0, 8.0, 10.0, 12.0, 18.0],
'variable29': [0.0, 6.0, 9.0, 11.0, 18.0],
'variable30': [0.0],
'variable31': [0.0]
}
の形式が保管されるように、並べ替えたいと考えております。勉強不足で申し訳ありません。
に返答するために、あらためて詳細に踏み込んだ shimizukawa さんのご質問
とその回答を拝読したうえで、 OrderedDict
を使っておくのが無難かなと思いました。
以下、そのコードになります。
追記2
Python 3.7.0 ドキュメント - 4.10. マッピング型
の中に
バージョン 3.7 で変更: 辞書の順序が挿入順序であることが保証されるようになりました。この振る舞いは CPython 3.6 の実装詳細でした。
との一文がありました。ですので、 Python 3.7 を使うのであれば、以下のように書くことで、キーの順序が保持された dict である data2
を作成することができます。
python
1data = {
2 'variable1': [0.0, 25.0, 50.0, 75.0],
3 'variable10': [0.0, 50.0, 100.0, 150.0],
4 'variable11': [0.0],
5 'variable12': [0.0, 30.0, 50.0, 70.0, 100.0],
6 'variable13': [0.0],
7 'variable14': [0.0],
8 'variable15': [0.0],
9 'variable16': [0.0],
10 'variable17': [0.0],
11 'variable18': [0.0],
12 'variable19': [0.0, 0.0, 100.0, 200.0, 300.0],
13 'variable2': [0.0],
14 'variable20': [0.0],
15 'variable21': [10.0, 20.0],
16 'variable22': [70.0, 100.0, 150.0, 200.0, 250.0],
17 'variable23': [5.0],
18 'variable24': [30.0, 60.0, 90.0, 150.0],
19 'variable25': [0.0, 70.0, 100.0, 120.0],
20 'variable26': [0.0, 30.0],
21 'variable27': [0.0, 8.0, 10.0, 12.0, 18.0],
22 'variable28': [0.0, 8.0, 10.0, 12.0, 18.0],
23 'variable29': [0.0, 6.0, 9.0, 11.0, 18.0],
24 'variable3': [0.0, 30.0, 90.0, 60.0],
25 'variable30': [0.0],
26 'variable31': [0.0]
27}
28
29data2 = dict()
30
31for k, v in sorted(data.items(), key=lambda x: int(x[0].replace('variable', ''))):
32 data2[k] = v
33
上記を勘案して言えることは、MOSMOS2さんがお使いの Pythonが、バージョン 3.7 より古いものでしたら、やはりOrderedDict
を使っておくのが無難、ということになるかなと思います。自学自習で使う環境(たとえば自分の私物のPCなど)でしたら、Pythonをバージョンアップすることは自由にできますが、業務で何らかの本番環境のためのコードを書いていると、本番環境の言語処理系が必ずしも最新のものではない、ということはよくあることですので、ご自身の環境の要件に合わせて、Python 3.7 による新しい機能を使うか、もしくは OrderedDict
を使うかを判断されるとよいかと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/16 06:08 編集
2018/09/16 06:41
2018/09/16 07:05 編集
2018/09/16 07:43
2018/09/16 10:36
2018/09/16 11:02
2018/09/16 11:09
2018/09/16 11:53