Есть ли метод обратный методу .get для словарей? Python

Есть словарь

mc_dict = {'полнолуние': 0, 'убывающая Луна': (1, 2, 3, 5, 6, 7), 'последняя четверть': 4,
           'новолуние': 8, 'растущая Луна': (9, 10, 11, 13, 14, 15), 'первая четверть': 12}

С помощью метода .get можно узнать значения соответствующие ключу

print(mc_dict.get('убывающая Луна'))
>> (1, 2, 3, 5, 6, 7)

И вот вопрос, есть ли метод обратный .get, который возвратит ключ для указанного значения?

print(mc_dict.method(11))
>> растущая Луна

Ответы (2 шт):

Автор решения: CrazyElf

Простого метода нет, придётся городить однострочник. Тем более, что у вас где-то коллекции, а где-то одиночные значения:

from collections.abc import Iterable

mc_dict = {'полнолуние': 0, 'убывающая Луна': (1, 2, 3, 5, 6, 7), 'последняя четверть': 4,
           'новолуние': 8, 'растущая Луна': (9, 10, 11, 13, 14, 15), 'первая четверть': 12}

n = 11
print([key for key,val in mc_dict.items() \
    if n == val or (isinstance(val, Iterable) and n in val)])

Вывод:

['растущая Луна']
→ Ссылка
Автор решения: Ara_Bog

Где-то видел решение красивее, но это тоже рабочее и можно записать в 1 строку.

mc_dict = {'полнолуние': 0, 'убывающая Луна': (1, 2, 3, 5, 6, 7), 'последняя четверть': 4,
           'новолуние': 8, 'растущая Луна': (9, 10, 11, 13, 14, 15), 'первая четверть': 12}
find_val = (9, 10, 11, 13, 14, 15)
print([i for i in mc_dict.keys()][[i for i in mc_dict.values()].index(find_val)])
→ Ссылка