【Python】辞書はなぜインデックス指定が使えないのか?その理由について紹介

20230820_Python プログラミング言語

以前pythonの辞書について紹介しました。

バリューを取得するときはキーを指定しましたね。
ではリストのようにインデックス(添え字)を指定するキーと値がセットで取得できるのでしょうか?

今回は辞書でインデックス指定ができるかどうか紹介します。

辞書はインデックス指定できる?

結論からいうと辞書はインデックス指定できません

例えばこのような辞書データがありました。
左からインデックス0, 1, 2と指定できそうな気がしますよね。

クリックして拡大できます

リストでインデックスを指定するのは[]の中に数字を入れました。
[0]を指定してみて'胸トレ': 'ベンチプレス'が取得できるか試してみましょう。

クリックして拡大できます

KeyError: 0と表示されました。
「キーに0なんて無いよ」という意味ですね。

どうやら[数字]ではインデックス指摘ができないようです。

メソッドを使ってインデックス指定ができないかどうか調べてみましたが有力な情報は見当たりません。

クリックして拡大できます

辞書は順序を持たない

なぜインデックス指定ができなかったのか?

辞書は並びに意味がないからです。
定義順にたまたま表示されているだけで実行のたびに順序が入れ替わってしまうこともありました。(Python3.7からは解消)

クリックして拡大できます

実行する毎にキーとバリューのセットが入れ替わっていてはインデックスも指定できないですよね。

クリックして拡大できます

Python3.7以降からは挿入順序という概念が追加された

Python3.7から辞書には挿入順序が保たれるようになりました。

What's New In Python 3.7
編集者, Elvis Pranskevichus < elvis@magic.io>,. この記事では Python 3.6 と比較した Python 3.7 の新機能を解説します。Python 3.7 は2018年6月27日にリリースされました。全詳細については 変更履歴 をご覧ください。 概要 -- リリースハイラ...
クリックして拡大できます

つまり挿入した順番で表示されキーとバリューのセットが入れ替わりません

クリックして拡大できます

しかし挿入順序は表示順番が固定化するだけで変わらずインデックス指定はできないんですよね。

辞書の本質はキーとバリューを関連付け1つのデータとして扱えることです。
順番通りであることは辞書には関係ないんですね。

まとめ

辞書がインデックス指定できないことを紹介しました。
私もたまにリストと間違えて辞書にインデックス指定を使っちゃいます。リストのインデックス指定と辞書のキー指定は使い方が似ているので間違えちゃいますよね。

辞書は順序に意味を持たないためインデックス指定ができませんでした。
順番に意味を持たせないときはリストを使うのが良いでしょう!