2016-08-03 5 views
3

私は辞書のために次のような構造を作成したい:Pythonでトリプルレイヤー辞書を定義する方法は?

{ id1: {id2: {id3: [] }}} 

最終的にはリストを指すようになりますトリプル辞書になります。

私はPythonで、それを開始するには、次のコードを使用します。

for i in range(2160): 
    for j in range(2160): 
     for k in range(2160): 
      subnetwork.update({i: {j: {k: [] }}}) 

このコードの実行に時間がかかりすぎます。これはBig-O(N^3)の複雑さです。

このプロセスをスピードアップする方法はありますか?おそらくデータ構造をシリアル化し、ハードドライブから取得する方が速いのですか?

どのようなデータ構造でも同様の結果が得られますか?キーとして3要素のタプルを使用するフラットな辞書が私の目的に役立つでしょうか?

+0

'i [0]' ??エラーが発生するはずです。 –

+0

*巨大なメモリを持つシステムを持っていない限り、あなたの構造は大きすぎます。 100億のリストを作成しています。すべてのリストは少なくとも1ダースのバイトになるので、少なくとも100GBのRAMが必要です。そして、これはディクテーションを数えていません。 – spectras

+0

2160 ** 3 = 10 077 696 000のリストを実際に入れ子にした辞書が必要ですか? –

答えて

2

本当にこの構造に100億エントリ(2,160 ** 3 == 10,077,696,000)が必要ですか?ディスクベースのソリューションはメモリベースのソリューションより高速になることはほとんどありませんが、同時にプログラムが実際のメモリの境界を超えて「ページスラッシング」が発生する可能性があります。

目的のアプリケーションについて何も知らずに、適切なソリューションを提案することは困難です。あなたは何をしようとしていますか?

たとえば、アイテムをランダムに検索する必要がない場合は、3要素のタプルをキーとして使用してフラットな辞書を考えることができます。しかし、あなたが何をしようとしているのかを使わないことは、おそらく非常に投機的なものになるでしょう。

+0

お返事ありがとうございます。はい、私はこの種の構造に対する代替のアプローチを探しています。あなたが最後に示唆したことはいい考えです、私は今実装しようとします。 3要素タプルのような他の同様のアプローチはありますか? – drizo

+1

実際に何をしたいのかに応じて、通常は問題に対処する方法がたくさんあります。あなたが解決しようとしている問題についてもう少し詳しく知ることはおそらく役に立ちます。 – holdenweb

+0

@drizo>この時点で、あなたはそれについてグーグルで行くべきだと思っています。もしあなたがまだ立ち往生しているなら、私たちは何も知らないあなたの実際の目的を述べる別の質問をしてください。 – spectras

関連する問題