2010-12-16 15 views

答えて

17

これらの命令は、内部的にどのように動作し、どのような順序でハッシュテーブルに格納されるのかに関係します。これは、キーのハッシュ値、挿入された順序、使用しているPythonの実装に依存します。

順序は任意です(ランダムではありません)。順序はわかりません。

ソートされたキーのリストを取得するには、sorted(D)を使用してください。この場合、['a', 'b', 'c']が返されます。

+1

辞書がどのように動作するかを知りたい場合はこれを見てください:http://us.pycon.org/2010/conference/schedule/event/12/ – DisplacedAussie

+0

私は上記のリンクにアクセスできません – SKT

+0

私はおそらくこの話だと思います: https://www.youtube.com/watch?v=C4Kc8xzcA68 –

5

:キーは(1つの辞書内で)一意である要件で、値のペア:

これは、キーの順不同のセットとして辞書を考えるのがベストです。

+0

ありがとう、私は辞書が順序付けられていないことを知っていました。だから、表示順序が変わったので、Pythonのことがちょっと混乱しました。 – QQending

+2

注文はいつでも変更できることが明示されています。それは実装がより速くなるようにするためです。特定の順序でキーが必要な場合は、それらを並べ替えることができます。 –

+2

QQending:順序付けされていないということは(とりわけ)、あなたが出す注文があなたが注文したものと異なる可能性があることを意味します。なぜ、パイソンの行動が混乱するのですか?なぜそれが "ソートされた"順序以外の何かをしたのか疑問に思うなら、辞書は検索木ではなくハッシュテーブルを使います。順序はおそらく、キーmodのハッシュに基づいて、テーブルの現在のサイズか、それと同等の予測不可能なものになります。 –

2

どのような順序であれ、満足しています。これは辞書の性質です。

あなたが Ordered Dictを使用することができますPythonの2.7で
>>> d = {'pax': 1, 'george': 2, 'guido' : 3} 

>>> d 
{'pax': 1, 'george': 2, 'guido': 3} 

>>> [(key,d[key]) for key in sorted(d)] 
[('george', 2), ('guido', 3), ('pax', 1)] 
+0

厳密には真実ではありません。レナートの答えは技術的により正確です。「注文は任意ですが(ランダムではありません)」 –

+1

ここでは「ランダム」とは言わず、辞書には順序が指定されていません。合っていると思われる順序でそれらを返すことができます。コンテンツと操作履歴に基づいて決定的な順序で返されるという事実は、あなたが望むならそれを自分でソートする責任からあなたを解決しません: "辞書オブジェクトのkeys()メソッドは、辞書で使用されているキーを任意の順序でソートしたい場合は、ソートされた()関数を適用するだけです。 " – paxdiablo

7

:あなたが特定の順序でそれをしたい場合は、自分で行う必要があります。

関連する問題