2012-01-04 4 views
1

У меня есть динамический набор, состоящий из серии данных порядка сотен объектов, где каждая серия должна быть идентифицирована (целым числом) и состоит из элементов, также обозначается целым числом. Каждый элемент представляет собой пользовательский класс.Лучший способ реализовать 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?

+0

Почему вы не можете вставить новое значение, а затем просто отсортировать список? '[1] .push (new)', а затем '[1] .sort()'? – tkone

+0

@tkone Я не использую списки прямо сейчас, я использую вложенный словарь. –

+0

В соответствии с вашим кодом вы используете списки. Списки определены в Python с помощью символа '[]'. Словари: '{}'. Кроме того, если они должны быть dicts, у вас есть только ключи и нет значений для ваших dicts. – tkone

ответ

0

Я думаю, что вы хотите это ДИКТ со значениями массива:

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

Вы можете работать на массивах, как вам угодно. Если значения массива являются последовательным Интсом просто использовать:

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

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

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

+0

Я думаю, что это лучшее решение для меня. Словарь с вложенными списками как значения. Благодарю. –

Смежные вопросы