2016-09-04 14 views
3
>>> d = {'A':1, 'b':2, 'c':3, 'D':4} 

>>> d 
{'A': 1, 'D': 4, 'b': 2, 'c': 3} 

>>> d.items() 
[('A', 1), ('c', 3), ('b', 2), ('D', 4)] 

d.items()を呼び出すと、2回ランダム化されますか?それとも、ランダム化が違うのですか? d.items()がdと同じ順序を返すようにする別の方法はありますか?dictとdict.items()の順序が異なるのはなぜですか?

編集:dictを自動的にソートするIPythonのように見えます。通常、dictとdict.items()は同じ順序でなければなりません。

+6

dictには固有の順序はありません。その要素は実装の詳細であり、dictの履歴に依存します。注文が問題となる場合は、注文したディクトを使用してください。それが問題でなければ、それに頼らないでください。 –

+1

d.keys()とd.items()の順序は一致しますが、[ref](http://stackoverflow.com/q/835092/2285236) – ayhan

+0

再生できません。 'd'と' d.items() 'の両方が同じ順序で表示されます。これらはあなたのテストで実際に同じであると確信していますか?表示されているステートメントの間に何もしていないと確信していますか? – user2357112

答えて

9

あなたはIPythonでこれをテストしたようです。 IPythonは、さまざまな種類の専用のきれいな印刷機能を使用し、dictsのきれいなプリンタは、印刷前にキーをソートします(可能な場合)。 d.items()呼び出しはキーをソートしないので、出力は異なります。

通常のPythonセッションでは、辞書のreprの項目の順番は、itemsの項目の順番と一致します。 Dictの反復順序は、dictが変更されていない限り安定しているはずです。 (この保証は辞書のreprに明示的に拡張されていませんが、reprの暗黙の反復が他の形式のdict反復と一貫性を失った場合は驚くでしょう)。

+1

これはIPythonの問題でした。 – Kevin

+2

'%pprint = False'はそれをオフにする必要があります。 –