2012-01-04 8 views
1

私は、各シリーズを(整数で)識別しなければならない数百のオブジェクトのオーダーのデータ系列からなる動的セットを持ち、整数で識別されます。各要素はカスタムクラスです。Pythonで直列要素の2次元配列を実装するための最良の方法

私はdefaultdictを使って入れ子になった(2-D)辞書を作成しました。これにより、キー/ IDでシリーズや個々の要素にすばやくアクセスできます。私は要素やシリーズ全体を追加したり削除したりできるようにする必要がありました。また、IDは追加/削除のために順次である必要はありません。 IDは私のアプリケーションを通してどこかで一意で参照されるので重要です。

例えば、今私は、一連の要素を挿入することができるようにしたい実現しますが、辞書はかなりそれをサポートしていない、しかし、

[1][1,2,3,4,5] 
[2][1,4,10] 
[4][1] 

をキー/ IDが設定され、次のデータを検討。例えば、私は(4,5から)その上のIDを引き起こし、シリーズ1 3と4との間に新たな要素を挿入できるようにしたい(5,6に)インクリメントする:

[1][1,2,3,4,5] becomes 
[1][1,2,3,4(new),5,6] 

要素は連続した系列の一部であるため、順序は重要です。これはinsert()をサポートしているのでネストされたリストでは簡単だが、要素インデックスを取得するために2次元配列全体を反復することが強制されるだろうか?

このデータ構造をPythonで実装する最も最適な方法は何でしょうか?

dict = {1:[...],3:[...], ....} 

あなたは、あなたのように配列にしてください動作させることができます。

+0

なぜ新しい値を挿入してリストをソートできないのですか? '[1] .push(new)'と '[1] .sort()'のどちらかです。 – tkone

+0

@tkoneリストを使用していません。入れ子になっている辞書を使用しています。 –

+0

あなたのコードによれば、あなたはリストを使用しています。リストはPythonで '[]'表記で定義されています。辞書は '{}'です。また、それらがdictsであることになっている場合は、あなたのdictsのためのキーと値がありません。 – tkone

答えて

0

は、私が何をしたいことは、配列の値を持つ辞書だと思います。配列値は だけで使うシーケンシャルint型であれば:あなたはそれが問題だ見つけるしない限り、

dict[key].append(vals) 
dict[key].sort() 

はスピードを心配しないでください。早期最適化 はすべての悪の根源です。

あなたが本当に効率的になりたいのであれば、実際にはdict値をソートしないでください。

+0

これは私にとって最高の解決策だと思います。値としてネストされたリストを持つ辞書。ありがとう。 –

関連する問題