Python3: dict の末尾のキーと要素を調べる

2020-09-22

#Python3 dict

Python で辞書(dict)の末尾の要素(最後に追加した要素)を調べる方法を解説します。

はじめに

Python 3.7 以降、辞書は要素の順序をリストのように保持するようになりました。
Python 3.6 までは要素順が保証されていませんので、代わりに標準ライブラリの OrderedDict を使いましょう。

末尾の要素を取り出す

要素順の保持に伴い辞書の popitem() メソッドは必ず末尾の要素を返すようになりました。
単に末尾の要素の取り出せば良い場合には popitem() を使いましょう。

末尾の要素を参照する

popitem() は、末尾の要素を返すと同時に、辞書からその要素を消去します。
従って、末尾の要素を参照したいだけの時には適していません。

リストやタプルならばマイナスのインデックス [-1] で末尾の要素を参照できます。
しかし辞書にはインデックス番号が無く、末尾を参照するためのメソッドも Python 3.8 の時点では有りません。
そこで、次のようにして参照します。

reversed() 関数で逆順のイテレータを生成し、next() で要素を一つ取得することで、効率よく末尾のキーを参照できます。
値のみを参照するときは、次のように d.values() で値のビューから直接参照するのも良いでしょう。

先頭の要素を参照する

先頭の要素の参照もほぼ同様です。
こちらは iter() で正順のイテレータを作って先頭のキーを参照します。

リストに変換する方法

辞書をリストに変換して取得することもできます。

これは直感的で解りやすいのですが、全てのキーが一旦リストに変換される為、要素数が多いときは非常に効率が悪くなります。
従ってこの方法は、要素数が少ないことが明白な場合にのみ使用するべきでしょう。

参考

QooQ