Как я могу получить dict, чей конкретный ключ является максимальным в dict of dicts?

#python #dictionary #max

#python #словарь #макс

Вопрос:

Допустим, у меня есть словарь с максимальными и минимальными температурами каждого месяца:

 t = {
    'jan': {
        'max': 21,
        'min': 12
    },
    'feb': {
        'max': 18,
        'min': 15
    },
    'mar': {
        'max': 20,
        'min': 17
    }
}
 

Теперь я хочу знать, какой месяц имеет наибольшее max значение. Для этого примера я хотел бы получить этот dict в результате (поскольку 21> 18 в феврале и 21> 20 в марте).:

 'jan': {
    'max': 21,
    'min': 12
}
 

Я могу легко получить самый большой словарь с помощью max() :

 >>> max(t.values(), key=lambda s: s.get('max'))
{'max': 21, 'min': 12}
 

Тем не менее, для меня также важно получить ключ dict, поэтому вместо того, чтобы просто {'max': 21, 'min': 12} получить полный 'jan': {'max':21, 'min':12} .

Текущий подход, который я использую, — это базовый цикл проверки значений:

 max_dict = dict()
max_key = ''
for k, v in t.items(): 
    if max_dict.get('max',0) <= v.get('max', 0): 
        max_dict = v 
        max_key = k 
 

И теперь max_key содержит «jan», в то время max_dict как содержит {'max': 21, 'min': 12} .

Тем не менее, я предполагаю, что какая-то сортировка с помощью max может обеспечить результат более простым способом.

Ответ №1:

Вы могли бы выполнить максимальное значение t.items() с помощью соответствующего ключа:

 >>> max(t.items(), key=lambda s: s[1]['max'])
('jan', {'max': 21, 'min': 12})
 

Комментарии:

1. Хороший, используя кортеж, поступающий из t.items()