2

わかりました、これは単純なはずです。私は辞書を3冊持っています。それらはすべて満足のいくように作成、注文、記入されていますが、より簡単かつ効率的に参照および操作できるように、それらすべてを包括的な辞書に入れたいと思います.

Layer0 = {}
Layer1 = {}
Layer2 = {}

ここに作成時のものがありますが、その後、SOの質問に基づいてさまざまなことを試してみました:

Layers = {Layer0, Layer1, Layer2}

構文エラーが発生しました

Layers = {'Layer0', 'Layer1', 'Layer2'}

別の構文エラーが発生しました

(Layers私が作成しようとしている辞書は、以前に作成されたすべての辞書をその中に含みます)

SO で見つけた他のすべての例は、辞書を埋める (または同時に埋める) ために辞書内に辞書を作成することに関連しています。これらの辞書を作成するために既に多数の行をコーディングしているので、コードを書き直すのではなく、事後に辞書を作成します。

入れたときに辞書の順序が保持されているとよいでしょう。Layers

これが可能かどうか、またどのようにすればよいか、誰にもわかりませんか?

4

2 に答える 2

10

ディクショナリ項目には、キーと値の両方があります。

Layers = {'Layer0': Layer0, 'Layer1': Layer1, 'Layer2': Layer2}
于 2012-08-15T18:35:51.803 に答える
2

辞書はハッシュ テーブル (つまり、キー名から一意のハッシュ値へのマッピング) であるため、辞書には順序がないことに注意してください。.keys() または .values() を使用すると、順序があるリストが生成されますが、辞書自体にはありません。

したがって、「レイヤーに配置するときに辞書の順序が保持されるのが最善です」と言うとき、これは実際には何の意味もありません。たとえば、辞書の名前を「Layer1、Layer2、Layer3」から「A、B、C」に変更すると、Layers.keys() が「A、C、B」の順序で印刷されることがわかります。これは、ディクショナリを作成するときに使用した順序に関係なく当てはまります。これが示すのは、「C」のハッシュ値が「B」のハッシュ値よりも小さいことだけであり、辞書の構造については何もわかりません。

これは、辞書を直接反復処理できない理由でもあります (キーのリストなどを反復処理する必要があります)。

補足として、このハッシュ関数により、ディクショナリは非常に高速なルックアップを実行できます。優れたハッシュ関数は一定時間の [O(1)] ルックアップを提供します。つまり、特定の項目が辞書に含まれているかどうかを同じ時間で確認できます。かなりクール。

于 2012-08-15T19:20:57.573 に答える