我有以下形式的数据列表:
[(id\__1_, description, id\_type), (id\__2_, description, id\_type), ... , (id\__n_, description, id\_type))
数据是从属于同一组的文件中加载的。在每个组中,可能有多个相同的 id,每个来自不同的文件。我不关心重复项,所以我认为存储所有这些内容的好方法是将其放入 Set 类型。但是有一个问题。
有时对于相同的 id,描述可能会略有不同,如下所示:
IPI00110753
- 微管蛋白 alpha-1A 链
- 微管蛋白 alpha-1 链
- α-微管蛋白 1
- α-微管蛋白同种型 M-α-1
(请注意,此示例取自uniprot 蛋白质数据库。)
我不在乎描述是否不同。我不能把它们扔掉,因为我使用的蛋白质数据库可能不包含某个标识符的列表。如果发生这种情况,我希望能够向生物学家显示人类可读的描述,以便他们大致了解他们正在研究的蛋白质。
我目前正在通过使用字典类型来解决这个问题。但是我不太喜欢这个解决方案,因为它使用了大量内存(我有很多这些 ID)。这只是它们的中间列表。在将 ID 放入数据库之前,还需要进行一些额外的处理,所以我想保持我的数据结构更小。
我真的有两个问题。首先,我会为此使用 Set 类型(而不是字典类型)获得更小的内存占用,还是应该使用排序列表,每次插入列表时检查 ID 是否存在,或者是否存在我没有想到的第三个解决方案?其次,如果 Set 类型是更好的答案,我如何键入它以仅查看元组的第一个元素而不是整个元素?
感谢您阅读我的问题,
蒂姆
更新
根据我收到的一些评论,让我稍微澄清一下。我对数据结构所做的大部分工作都是插入其中。我只读了两次,一次是用附加信息注释它,一次是要插入到数据库中。然而,在我插入数据库之前,可能会有额外的注释。不幸的是,我不知道此时是否会发生这种情况。
现在我正在研究将这些数据存储在不基于哈希表(即字典)的结构中。我希望新结构在插入时相当快,但读取它可以是线性的,因为我实际上只做了两次。我试图远离哈希表以节省空间。是否有更好的结构或者哈希表是否尽可能好?
*该信息是我通过查询 uniprot 获得的 Swiss-Prot 蛋白质标识符列表。