辞書内の項目の順序を決定するものは何ですか (特に Python では、これは他の言語にも当てはまる場合があります)? 例えば:
>>> spam = {'what':4, 'shibby':'cream', 'party':'rock'}
>>> spam
{'party': 'rock', 'what': 4, 'shibby': 'cream'}
もう一度スパムを呼び出しても、アイテムは同じ順序のままです。しかし、この順序はどのように決定されるのでしょうか。
辞書内の項目の順序を決定するものは何ですか (特に Python では、これは他の言語にも当てはまる場合があります)? 例えば:
>>> spam = {'what':4, 'shibby':'cream', 'party':'rock'}
>>> spam
{'party': 'rock', 'what': 4, 'shibby': 'cream'}
もう一度スパムを呼び出しても、アイテムは同じ順序のままです。しかし、この順序はどのように決定されるのでしょうか。
python docsによると、
辞書は、「連想メモリ」または「連想配列」として他の言語で見られることがあります。数値の範囲でインデックスが作成されるシーケンスとは異なり、辞書はキーでインデックスが作成されます。文字列と数字は常にキーになることができます。
それらは、再びドキュメントから任意です:
ディクショナリのキーはほとんど任意の値です。ハッシュ可能でない値、つまり、リスト、辞書、またはその他の変更可能な型 (オブジェクト ID ではなく値で比較される) を含む値は、キーとして使用できません。キーに使用される数値型は、数値比較の通常の規則に従います。2 つの数値が等しい場合 (1 と 1.0 など)、同じ辞書エントリのインデックスにそれらを交換可能に使用できます。(ただし、コンピュータは浮動小数点数を近似値として格納するため、通常、浮動小数点数を辞書のキーとして使用することは賢明ではありません。)
通常の辞書の順序は内部ハッシュ値に基づいているため、それについて仮定する必要はありません。
collections.OrderedDict
順序を制御する辞書に使用します。
辞書のキーはハッシュ テーブルに格納されるためです。http://en.wikipedia.org/wiki/Hash_tableによると:
ハッシュ テーブルに格納されたエントリは、(エントリあたりのコストが一定で) 効率的に列挙できますが、疑似ランダムな順序でしか列挙できません。