Есть ли структура данных Python, которая сортируется и доступна для поиска? - PullRequest
3 голосов
/ 25 мая 2011

Я использую python для управления очередью строк для обработки.У него есть пара требований:

  • Каждая строка соответствует приоритету и обрабатывается исключительно на основе этого значения.
  • Строки могут быть добавлены в эту очередь динамически, но повторяющиеся строки не допускаются в очереди.Если дубликат представлен, то он должен быть идентифицирован и проигнорирован.

Так есть ли какой-либо тип данных python, который позволит что-то подобное?Или я должен написать свой собственный?

Если нет родного, то я думаю о поддержке двух структур.

  1. A heapq который будет поддерживать строки и их приоритет
  2. A список , который поддерживает хэш строк, чтобы проверить, сохранена ли строка

Покаони не синхронизируются, это должно решить проблему.

Ответы [ 2 ]

5 голосов
/ 25 мая 2011

Звучит как разумный подход. Я бы использовал set вместо list, поскольку он имеет более эффективную проверку членства, и вам не нужно поддерживать порядок (поскольку вы делаете это в heapq)

2 голосов
/ 25 мая 2011

Упорядоченный словарь может быть полезен.

См. Эту страницу ( упорядоченный словарь ), где говорится:

Упорядоченный словарь содержит ключипорядок вставки.Это иногда называют словарём созданного заказа.

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

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

...