では、キーと値のペアを辞書に出力する場合、それらは特定の順序で出力されるのでしょうか? (パイソン)
3 に答える
順序はありますが (ある必要があります)、順序が毎回同じであるとは限りません。結果を並べ替える必要がある場合は、OrderedDictを使用するか、データをリスト内で個別に並べ替えます。
順序は、ディクショナリにアイテムを追加および削除した正確な順序によって異なります。また、Python のバージョンにも依存し、最近のバージョンの Python では、アプリケーションの実行ごとに異なる場合さえあります。
たとえば、Python 2.7:
>>> dict.fromkeys("abi")
{'a': None, 'i': None, 'b': None}
>>> dict.fromkeys("iba")
{'i': None, 'a': None, 'b': None}
しかし、Python 3.3:
>>> dict.fromkeys("abi")
{'a': None, 'b': None, 'i': None}
再びPython 3.3で、インタープリターを再起動した後:
>>> dict.fromkeys("abi")
{'b': None, 'a': None, 'i': None}
秩序があると考える罠に陥ってはいけません。古いバージョンの Python では、期待される順序を実際に考え出すことができましたが、それを基にコードを作成することは、単に問題を引き起こしているだけです。ここで最も一般的な落とし穴は、おそらく doctest を作成するときです。辞書の順序をアサートする doctest を作成するのは非常に簡単ですが、順序が変更されるとコードが失敗します。
一般に、辞書は順序付けされていませんが、これは、意図したとおりに順序付けされていないという理解の下にのみあります。Python はそれらをシャッフルして、ハッシュ テーブルを使用して、リストやタプルよりもすばやくキーを検索できるようにします。
これは、ディクショナリには順序があることを意味しますが、すぐには明らかではなく、ユーザーが理解する必要はありません。