Dict型で追加した順序通りに取得する方法!!




takkun
どうも!たっくんです!
今週は3連休ですね!みなさんはお出かけされますか?(*´ω`*)b

Python標準のDict型は、追加した順番は保持してくれません。。。処理する都合で、Dict型に追加した順番通りにしたいこともしばしば、、、

そんな時、便利なのが「OrderedDict」です!

OrderedDictって?

標準ライブラリである「OrderedDict」を使用してDict型のオブジェクトを作ると、追加した順番通りにキーを取り出すことができちゃいます!

Dict型でデータを作りながら、Tuple型で順番を別に管理する、、、なんてことをしなくてOKになります!

使い方

OrderedDictの使い方は、以下の通りです!

from collections import OrderedDict
data = OrderedDict(キー=値, 必要があればカンマ区切りで追加)

試しに、簡単にやってみますー!

from collections import OrderedDict
data = OrderedDict(tx=0)
print data
# OrderedDict([('tx', 0)])

Dict型のように、同じように追記できます!しっかり追加した順番を覚えてくれていますね(゚∀゚)

from collections import OrderedDict
data = OrderedDict(tx=0)
data["ty"]=1
print data
# OrderedDict([('tx', 0), ('ty', 1)])

初期化の注意!

OrderedDictは「追加された」順番を覚えてくれますが、作ったときの順番は覚えてくれません。上記のコードを初期化でやってしまうと、順番がめちゃめちゃになってしまいます(;´∀`)

from collections import OrderedDict
data = OrderedDict(tx=0, ty=1, tz=2)
print data
# OrderedDict([('tz', 2), ('tx', 0), ('ty', 1)])

こういった場合は、以下のようにするといいと思います!(`・ω・´)ゞ

from collections import OrderedDict
data = OrderedDict()# インスタンスを作るだけ
data["tx"]=0# 中身は追加していく
data["ty"]=1
data["tz"]=2
print data
# OrderedDict([('tx', 0), ('ty', 1), ('tz', 2)])

Tuple型から変換してしまう手もあります!

from collections import OrderedDict
temp = (("tx",0), ("ty",1), ("tz",2))
data = OrderedDict(temp)# tuple型から変換する
print data
# OrderedDict([('tx', 0), ('ty', 1), ('tz', 2)])