Максимальное значение Python extract из вложенного словаря

У меня есть вложенный словарь формы:

{'2015-01-01': {'time': '8', 'capacity': '5'}, '2015-01-02': {'time': '8', 'capacity': '7'}, '2015-01-03': {'time': '8', 'capacity': '8'} etc} 

Словарь создается из файла csv с помощью dictreader. То, что я хотел бы сделать, это вернуть максимальное значение емкости. Итак, в этом случае 8.

Я могу использовать:

 for k,v in input_dict.items(): if temp_max < int(v['capacity']): temp_max = int(v['capacity']) 

который работает, но я подумал, есть ли более аккуратный метод? Я искал и нашел методы для извлечения ключа верхнего уровня, связанного с максимальным значением, которое, конечно, не то, что мне нужно. Смотри ниже:

 max(input_dict, key=lambda v: input_dict[v]['capacity']) 

который вернул бы «2015-01-03», поэтому я предполагаю, что есть простой мод для вышеупомянутого одного лайнера, который даст мне то, что мне нужно, но у меня есть тупое!

Есть идеи?

Вы хотите

 max(int(d['capacity']) for d in input_dict.values()) 

Объяснение:

Если вы не заботитесь о клавишах, просто перебирайте вложенные dicts (IOW значения внешнего dict)

Также ваши внутренние значения dicts «capacity» сохраняются как строки, я предполагаю, что вы хотите проверить целочисленное значение. Чтобы узнать разницу, проверьте следующее:

 >>> max(["1", "5", "18", "01"]) '5' >>> max([1, 5, 18, 01]) 18 >>> 

Возьмите каждое число вместимость и проверьте максимальный:

 >>> myDict = {'2015-01-01': {'time': '8', 'capacity': '5'}, '2015-01-02': {'time': '8', 'capacity': '7'}, '2015-01-03': {'time': '8', 'capacity': '8'} } >>> max_capacity = max([int(i['capacity']) for i in myDict.values()]) >>> max_capacity 8 

Вы можете сделать это очень скучно

 print max(input_dict.items(), key=lambda v: int(input_dict[v[0]]['capacity']))[1]['capacity'] 

Но подождите, почему этот max(input_dict, key=lambda v: input_dict[v]['capacity']) не работает OMG причина в том, что это

Когда вы вызываете max(input_dict, key=lambda v: input_dict[v]['capacity']) вызываются клавиши input_dict dicts, поэтому вы получаете вывод, который является key with highest capacity

Заметки:

  • То, что я сделал в моей функции max, я называю функцией словарей словарей, которая returns the key and value in List of set так как я использовал список set в качестве тестового примера. Я получу набор как вывод из функции max.

  • Первым значением будет key а вторым значением будет value

  • Поэтому после применения функции max я получил бы набор с двумя значениями, один из которых является ключевым, а другой – соответствующим значением, чтобы вы могли использовать [1]['capacity'] чтобы получить значение capacity