2016-08-16 14 views
4
exampleDict = {'a':1, 'b':2, 'c':3, 'd':4} 

上記辞書は当初、この順に貫通反復:内部辞書の順序を変更できますか?

b=2 
d=4 
a=1 
c=3 

その後、私は自分のコード内のファイルのトンの周りに移動し、今ではこの順序で繰り返し処理:

d=4 
a=1 
c=3 
b=2 

注文は内部的にハッシュマップとして保存されていますが、その内部注文が変更される原因は何ですか?

編集:私は命令を保存する必要はありませんので、私は辞書を使用することに固執します。なぜそれが起こったのか不思議です。注文は保証されていないと思っていましたが、一旦内部的な注文があれば、将来の繰り返しのためにそれに固執します。

+1

これはあなたの質問に対する回答ではありませんが、あなたが注文を気にするならば、あなたは 'dict'を使用すべきではありません。 –

+0

挿入の順序によって、繰り返しの間に見られる順序が変わる可能性があります。また、風の方向。あなたの出力は前と同じ順番で、 'b = 2'だけが最後まで移動します。 –

+0

挿入順序によっては、エントリが変更されることがあります(ハッシュの衝突のため)。私が好奇心を持っているのはなぜそれが重要かということです。 – AndyG

答えて

5

Dictの固定順序を持っていないOrderedDictクラスを、チェックアウトする場合

はCPythonの実装の詳細:キーと値に記載されています ランダムではない任意の順序は、Python の実装によって異なり、ディクショナリの挿入履歴 と削除によって異なります。

あなたが本当にそれを注文維持する必要がある場合は、OrderedDictと呼ばれるオブジェクトがあります:

from collections import OrderedDict 
exampleDict = OrderedDict({'a':1, 'b':2, 'c':3, 'd':4}) 

はまた、あなたがそれらを注文したい理由について興味

-1

はい。 dictへの別の呼び出しの間にコードを変更すると、反復の順序が変わります。項目()、キー()、値()、iteritems()は、iterkeys()、及びitervalues()が辞書にない介在修正、リストと呼ばれる場合docs

から

直接対応します。

挿入物の順序は、documentationから

+0

* "はい。dictへの別の呼び出し間でコードを変更すると、反復の順序が変わります。"*定義されている場所を教えてください。なぜ' time.time() 'を呼び出すと、任意のディクテーションの順序が変わるのでしょうか。 –

+0

私の文章はもっとはっきりしているはずです。変化する。 – RahulHP

関連する問題