У меня есть список данных в следующей форме:
[(id\__1_, description, id\_type), (id\__2_, description, id\_type), ... , (id\__n_, description, id\_type))
Данные загружаются из файлов, принадлежащих к той же группе. В каждой группе может быть несколько идентичных идентификаторов, каждый из которых имеет разные файлы. Меня не волнуют дубликаты, поэтому я подумал, что хороший способ сохранить все это - перевести его в тип Set. Но есть проблема.
Иногда для одного и того же идентификатора описания могут незначительно отличаться, как показано ниже:
IPI00110753
- Тубулин альфа-1А цепь
- Тубулин альфа-1 цепь
- Альфа-тубулин 1
- Альфа-тубулин, изотип М-альфа-1
(Обратите внимание, что этот пример взят из базы данных uniprot белка .)
Мне все равно, если описания различаются. Я не могу их выбросить, потому что есть вероятность, что база данных о протеинах, которую я использую, не будет содержать список для определенного идентификатора. Если это произойдет, я захочу показать биологически понятное описание для человека, чтобы они примерно знали, на какой белок они смотрят.
В настоящее время я решаю эту проблему, используя тип словаря. Однако мне не очень нравится это решение, потому что оно использует много памяти (у меня много этих идентификаторов). Это только промежуточный список из них. Существует некоторая дополнительная обработка идентификаторов, прежде чем они будут помещены в базу данных, поэтому я бы хотел, чтобы моя структура данных была меньше.
У меня действительно два вопроса. Во-первых, получу ли я для этого меньший объем памяти, используя для этого тип Set (по типу словаря), или мне следует использовать отсортированный список, в котором я проверяю каждый раз, когда вставляю в список, чтобы увидеть, существует ли идентификатор или есть ли третье решение, о котором я не думал? Во-вторых, если тип «Set» является лучшим ответом, как мне указать его, чтобы он смотрел только на первый элемент кортежа вместо всего этого?
Спасибо, что прочитали мой вопрос,
Тим
Обновление
на основе некоторых комментариев, которые я получил, позвольте мне немного уточнить. Большая часть того, что я делаю со структурой данных, это вставка в нее. Я только прочитал это дважды, один раз, чтобы аннотировать это дополнительной информацией, * и один раз, чтобы сделать, чтобы быть вставленным в базу данных. Однако в дальнейшем может появиться дополнительная аннотация, которая делается до того, как я вставлю ее в базу данных. К сожалению, я не знаю, произойдет ли это в это время.
Сейчас я пытаюсь сохранить эти данные в структуре, которая не основана на хеш-таблице (т. Е. Словаре). Я хотел бы, чтобы новая структура была довольно быстрой при вставке, но чтение ее может быть линейным, поскольку я действительно делаю это только дважды. Я пытаюсь отойти от хеш-таблицы, чтобы сэкономить место. Есть ли лучшая структура или хэш-таблица настолько хороша, насколько это возможно?
* Информация представляет собой список идентификаторов белков Swiss-Prot, которые я получаю, запрашивая uniprot.