Pythonの辞書(dict)では、keyを登録した順番は記憶されません。
例えば以下のコードを実行すると、
# 普通のdictの場合 d = {} d["zz"] = 0 d["cc"] = 30 d["aa"] = 10 d["bb"] = 20 d["aa"] = 40 for key, val in d.items(): print(key, val)
以下の結果が得られます。登録した順番と異なる順番で要素が取り出されてしまいました。
cc 30 aa 40 bb 20 zz 0
辞書に登録したkeyの順番を保ちたい場合には、標準ライブラリのcollections.OrderedDictを使うのが良い方法です。 使い方はほとんどdictと同じです。
from collections import OrderedDict od = OrderedDict() od["zz"] = 0 od["cc"] = 30 od["aa"] = 10 od["bb"] = 20 od["aa"] = 40 for key, val in od.items(): print(key, val)
実行結果は以下です。きちんと登録順にkeyが並んでいます。同じkeyに再代入した場合は後に登録した値が記録されています。
zz 0 cc 30 aa 40 bb 20
OrderedDictがあればOrderedSetがあってもよいような気がしますが、残念ながらないようです(Does Python have an ordered set? - Stack Overflow)。ただしレシピがOrderedSet « Python recipes « ActiveState Codeにあります。