2016-09-05 5 views
1

Я хотел бы создать словарь, как это:Как представлять «диапазон» в питона Словаре

1,2 = "A" 

3,4 = "B" 

5,6,7・・・(>=5) = "C" 

поэтому я попытался ниже, но техника его подводит хорошо работает ..

dict = {1:"A", 2:"A", 3:"B", 4:"B", >=5:"C"} 

как я могу создать такой словарь?

+3

Вы не можете сделать это со словарем. Ваша ближайшая структура заключается в том, чтобы сделать кортеж как ключ: '{(1, 2):« A », (3, 4):« B »}'. Представить что-то вроде «> = 5». Вам нужно будет представлять его точно как строку. Тем не менее, все это кажется очень хриплым и сомнительным с точки зрения выбора дизайна. Может быть, вы можете объяснить, что именно вы пытаетесь сделать? Возможно, есть еще один способ взглянуть на это, что упростит ваш дизайн? – idjaw

+1

Вы не можете так писать. Кстати, могут ли ключи быть отрицательными? как '-1, -2'? –

+1

Если у вас есть только целые числа '> 0', вы можете определить словарь без' 'C '' и использовать 'your_dict.get (key,« C »)'. Он вернет '' C ''для каждого отсутствующего ключа. –

ответ

1

Поиск значения, когда ключ находится в отсортированном диапазоне, ограничен O(log n). Следовательно, использование словаря напрямую не является жизнеспособным. Вы можете сделать это следующим образом:

  • хранящих диапазоны в списке, сортируя их, и делать бинарный поиск, или ...
  • используя древовидную структуру данных.

Существуют и другие творческие решения, такие как хранение всех чисел в диапазоне в словаре в виде целых ключей и дублирование ссылок на одно и то же значение (что похоже на то, что у вас есть выше). Это было бы O(1) поиска, но будет иметь негативные побочные эффекты, такие как:

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

... который может быть в порядке в зависимости от вашего использования.

Таким образом, прямого решения нет.

+0

Для большого количества данных дерево интервала будет подходящим. Если данные малы, как буквальный вопрос, последовательность if/elif /.../ else будет прекрасным решением. – Jerry101

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