Вот решение, которое работает как в Python 2, так и в Python 3:
dict((v, k) for k, v in list.items())[search_age]
Часть до [search_age]
создает обратный словарь (где значения являются ключами и наоборот).Вы можете создать вспомогательный метод, который будет кешировать этот обратный словарь, например:
def find_name(age, _rev_lookup=dict((v, k) for k, v in ages_by_name.items())):
return _rev_lookup[age]
или, в более общем случае, фабрику, которая создаст метод поиска по возрасту для одного или нескольких списков
def create_name_finder(ages_by_name):
names_by_age = dict((v, k) for k, v in ages_by_name.items())
def find_name(age):
return names_by_age[age]
, чтобы вы могли сделать:
find_teen_by_age = create_name_finder({'george':16,'amber':19})
...
find_teen_by_age(search_age)
Обратите внимание, что я переименовал list
в ages_by_name
, поскольку первый тип является предопределенным.