Лучший способ реализовать 2-D массив элементов серии в Python - PullRequest
1 голос
/ 04 января 2012

У меня есть динамический набор, состоящий из ряда данных порядка сотен объектов, где каждый ряд должен быть идентифицирован (целым числом) и состоит из элементов, также идентифицированных целым числом. Каждый элемент является пользовательским классом.

Я использовал defaultdict для создания вложенного (2-D) словаря. Это позволяет мне быстро получить доступ к серии и отдельным элементам по ключу / идентификатору. Мне нужно было иметь возможность добавлять и удалять элементы и целые серии, так что диктовка служила мне хорошо. Также обратите внимание, что идентификаторы не должны быть последовательными из-за добавления / удаления. Идентификаторы важны, поскольку они уникальны и на них ссылаются в другом месте через мое приложение.

Например, рассмотрим следующий набор данных с ключами / идентификаторами,

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

Однако теперь я понимаю, что хочу иметь возможность вставлять элементы в серию, но словарь не совсем это поддерживает. Например, я хотел бы иметь возможность вставить новый элемент между 3 и 4 для серии 1, в результате чего идентификаторы над ним (с 4,5) будут увеличиваться (до 5,6):

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

Порядок имеет значение, поскольку элементы являются частью последовательного ряда. Я понимаю, что это было бы проще с вложенным списком, поскольку он поддерживает insert (), но тогда я был бы вынужден перебирать весь двумерный массив, чтобы получить правильные индексы элементов?

Какой самый оптимальный способ реализовать эту структуру данных в Python?

1 Ответ

0 голосов
/ 04 января 2012

Я думаю, что вы хотите, это диктовать со значениями массива:

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

Затем вы можете работать с массивами по своему усмотрению. Если значения массива являются последовательными целочисленными значениями просто используйте:

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

Не беспокойтесь о скорости, если только вы не обнаружите, что это проблема. Преждевременная оптимизация корень зла.

На самом деле, даже не сортируйте свои диктальные значения до тех пор, пока вам не понадобится, если вы хотите быть действительно эффективными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...