以前pythonの辞書について紹介しました。
バリューを取得するときはキーを指定しましたね。
ではリストのようにインデックス(添え字)を指定するキーと値がセットで取得できるのでしょうか?
今回は辞書でインデックス指定ができるかどうか紹介します。
辞書はインデックス指定できる?
結論からいうと辞書はインデックス指定できません。
例えばこのような辞書データがありました。
左からインデックス0, 1, 2と指定できそうな気がしますよね。
リストでインデックスを指定するのは[]
の中に数字を入れました。[0]
を指定してみて'胸トレ': 'ベンチプレス'
が取得できるか試してみましょう。
KeyError: 0
と表示されました。
「キーに0なんて無いよ」という意味ですね。
どうやら[数字]
ではインデックス指摘ができないようです。
メソッドを使ってインデックス指定ができないかどうか調べてみましたが有力な情報は見当たりません。
辞書は順序を持たない
なぜインデックス指定ができなかったのか?
辞書は並びに意味がないからです。
定義順にたまたま表示されているだけで実行のたびに順序が入れ替わってしまうこともありました。(Python3.7からは解消)
実行する毎にキーとバリューのセットが入れ替わっていてはインデックスも指定できないですよね。
Python3.7以降からは挿入順序という概念が追加された
Python3.7から辞書には挿入順序が保たれるようになりました。
つまり挿入した順番で表示されキーとバリューのセットが入れ替わりません。
しかし挿入順序は表示順番が固定化するだけで変わらずインデックス指定はできないんですよね。
辞書の本質はキーとバリューを関連付け1つのデータとして扱えることです。
順番通りであることは辞書には関係ないんですね。
まとめ
辞書がインデックス指定できないことを紹介しました。
私もたまにリストと間違えて辞書にインデックス指定を使っちゃいます。リストのインデックス指定と辞書のキー指定は使い方が似ているので間違えちゃいますよね。
辞書は順序に意味を持たないためインデックス指定ができませんでした。
順番に意味を持たせないときはリストを使うのが良いでしょう!