Python で辞書(dict)の末尾の要素(最後に追加した要素)を調べる方法を解説します。
はじめに
Python 3.7 以降、辞書は要素の順序をリストのように保持するようになりました。
Python 3.6 までは要素順が保証されていませんので、代わりに標準ライブラリの OrderedDict を使いましょう。
末尾の要素を取り出す
要素順の保持に伴い辞書の popitem() メソッドは必ず末尾の要素を返すようになりました。
単に末尾の要素の取り出せば良い場合には popitem()
を使いましょう。
末尾の要素を参照する
popitem()
は、末尾の要素を返すと同時に、辞書からその要素を消去します。
従って、末尾の要素を参照したいだけの時には適していません。
リストやタプルならばマイナスのインデックス [-1]
で末尾の要素を参照できます。
しかし辞書にはインデックス番号が無く、末尾を参照するためのメソッドも Python 3.8 の時点では有りません。
そこで、次のようにして参照します。
d = {'x': 10, 'y': 20, 'z': 30}
last_key = next(reversed(d), None)
print(last_key)
# z
print(d[last_key])
# 30
reversed()
関数で逆順のイテレータを生成し、next()
で要素を一つ取得することで、効率よく末尾のキーを参照できます。
値のみを参照するときは、次のように d.values()
で値のビューから直接参照するのも良いでしょう。
先頭の要素を参照する
先頭の要素の参照もほぼ同様です。
こちらは iter()
で正順のイテレータを作って先頭のキーを参照します。
リストに変換する方法
辞書をリストに変換して取得することもできます。
これは直感的で解りやすいのですが、全てのキーが一旦リストに変換される為、要素数が多いときは非常に効率が悪くなります。
従ってこの方法は、要素数が少ないことが明白な場合にのみ使用するべきでしょう。
コメントを投稿