Для одноразового поиска, если вы стремитесь начать с этой структуры данных и не можете амортизировать время, необходимое для встраивания ее в словарь, и не знаете, отсортирована ли начальная структура (так что поиск по бисекции не возможен), нет более быстрых алгоритмов, чем простой линейный поиск. Вы можете выразить это элегантно, например в Python 2.6 или лучше:
label = next((lab for cho, lab in choices if cho==someint), None)
при условии, что вы хотите, чтобы метка была None
, если нет выбора - или если вы хотите, чтобы в этом случае было вызвано исключение, просто
label = next(lab for cho, lab in choices if cho==someint)
или в более старых версиях Python
label = (lab for cho, lab in choices if cho==someint).next()
но я сомневаюсь, что производительность сильно изменится (легко измерить с помощью timeit
, если вам не все равно, но в этом случае вам нужно предоставить некоторые реалистичные примеры choices
- типичная длина, вероятность того, что выбор не будет приемлемым и т. Д. и т. д.).