次の形式のデータのリストがあります。
[(id\__1_, description, id\_type), (id\__2_, description, id\_type), ... , (id\__n_, description, id\_type))
データは、同じグループに属するファイルからロードされます。各グループには、同じ ID が複数存在する可能性があり、それぞれが異なるファイルから取得されます。重複は気にしないので、これをすべて格納する良い方法は Set 型に入れることだと思いました。しかし、問題があります。
同じ ID でも、次のように説明が若干異なる場合があります。
IPI00110753
- チューブリン α-1A チェーン
- チューブリン α-1 鎖
- αチューブリン1
- α-チューブリン アイソタイプ M-α-1
(この例はuniprot タンパク質データベースから取得したことに注意してください。)
説明が異なっていても構いません。私が使用しているタンパク質データベースには、特定の識別子のリストが含まれていない可能性があるため、それらを捨てることはできません. これが発生した場合、人間が読める説明を生物学者に表示できるようにして、彼らが見ているタンパク質を大まかに知ることができるようにしたいと考えています.
現在、辞書型を使用してこの問題を解決しています。ただし、このソリューションは多くのメモリを使用するため、あまり好きではありません (これらの ID が多数あります)。これはそれらの中間のリストにすぎません。ID がデータベースに配置される前に、いくつかの追加処理が行われるため、データ構造を小さく保ちたいと考えています。
本当に2つの質問があります。まず、これには (辞書型よりも) Set 型を使用してメモリ フットプリントを小さくするか、またはリストに挿入するたびに ID が存在するかどうかを確認するソート済みリストを使用するか、または私が考えていなかった3番目の解決策は?第二に、セット型がより良い答えである場合、タプル全体ではなく最初の要素だけを見るようにキーを設定するにはどうすればよいですか?
私の質問を読んでくれてありがとう、
ティム
アップデート
私が受け取ったコメントのいくつかに基づいて、少し明確にさせてください。私がデータ構造で行うことのほとんどは、データ構造への挿入です。1 回は追加情報で注釈を付けるため、もう 1 回はデータベースに挿入するためです。ただし、データベースに挿入する前に追加の注釈が行われる場合があります。残念ながら、現時点でそれが起こるかどうかはわかりません。
現在、ハッシュテーブルに基づいていない構造(つまり、辞書)にこのデータを格納することを検討しています。私は新しい構造が挿入時にかなり迅速であることを望んでいますが、実際には2回しかやらないので、それを読むことは線形になる可能性があります. スペースを節約するために、ハッシュ テーブルから離れようとしています。より良い構造がありますか、それともハッシュテーブルはそれと同じくらい良いですか?
*情報は、uniprot を照会して取得した Swiss-Prot タンパク質識別子のリストです。