Есть ли метод обратный методу .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)])