У меня есть динамический набор, состоящий из серии данных порядка сотен объектов, где каждая серия должна быть идентифицирована (целым числом) и состоит из элементов, также обозначается целым числом. Каждый элемент представляет собой пользовательский класс.Лучший способ реализовать 2-мерный массив элементов серии в Python
Я использовал 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(), но тогда я был бы вынужден итерации по всему 2-D массиву, чтобы получить индексы элементов правильно?
Что было бы самым оптимальным способом реализации этой структуры данных в Python?
Почему вы не можете вставить новое значение, а затем просто отсортировать список? '[1] .push (new)', а затем '[1] .sort()'? – tkone
@tkone Я не использую списки прямо сейчас, я использую вложенный словарь. –
В соответствии с вашим кодом вы используете списки. Списки определены в Python с помощью символа '[]'. Словари: '{}'. Кроме того, если они должны быть dicts, у вас есть только ключи и нет значений для ваших dicts. – tkone