torinaブログ

DjangoとBootstrap4で作成したブログ
Python, Django, Kivy, Bootstrap, Apache等のメモです
ソースコード

Python、順序付き辞書(OrderedDict)

Python Python標準ライブラリ
2016年5月25日0:23
Pythonの標準ライブラリにあるcollectionsモジュールには色々と便利なものがありますが、
今回は辞書に順序をつけれるOrderDictの使い方です。

簡単なサンプルです。
from collections import OrderedDict
 
my_dic = OrderedDict()
my_dic["a"] = "A"
my_dic["b"] = "B"
my_dic["c"] = "C"
my_dic["d"] = "D"
my_dic["e"] = "E"


通常の辞書のように、items()などでkeyとvalueを取り出せます。
順序が格納した順になっていますね。
for key, value in my_dic.items():
    print(key, value)
 
a A
b B
c C
d D
e E


格納した後に中身を入れ替えても、順序は保持されます。
my_dic["b"] = "ビー"
for key, value in my_dic.items():
    print(key, value)
a A
b ビー
c C
d D
e E


削除にはpopが使えます。
my_dic.pop("b")
for key, value in my_dic.items():
    print(key, value)
 
a A
c C
d D
e E


一度消したものを、新たに入れても最後に移動します。当然ですね。
my_dic.pop("b")
my_dic["b"] = "B"
for key, value in my_dic.items():
    print(key, value)
 
a A
c C
d D
e E
b B


最後の要素を削除するには、popitem()を使います。(後入先出)
my_dic.popitem()
for key, value in my_dic.items():
    print(key, value)
a A
b B
c C
d D


最初の要素を削除するには、popitem(False)とします。(先入先出。デフォルトでTrueということです。)
my_dic.popitem(False)
for key, value in my_dic.items():
    print(key, value)
 
b B
c C
d D
e E


popやpopitemは、消去したあとにkeyやvalueを返します。具体的には以下のような感じです。
key_a = my_dic.popitem(False)
key_e = my_dic.popitem()
key_c = my_dic.pop("c")
print(key_a, key_e, key_c)
 
for key, value in my_dic.items():
    print(key, value)
 
('a', 'A') ('e', 'E') C
b B
d D