Поиск наибольшего значения в словаре внутри словаря

#python #dictionary #max

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

Вопрос:

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

Однако значения находятся в другом словаре. Таким образом, формат выглядит примерно так:

 data = {
    'Country1': {2015: 5, 2016: 9, 2017: 2},
    'Country2': {2015: 20, 2016: 10, 2017: 5}
}
 

Конечно, там больше двух стран, но по сути мне нужно найти наибольшее значение за определенный год (скажем, 2015). У кого-нибудь есть краткое представление о том, как действовать дальше? Я рассмотрел несколько похожих вариантов, таких как max() или lambda , но я не уверен, как их можно использовать в этой конкретной ситуации со списком внутри списка.

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

1. max(d[2015] for d in data.values()) Обратите внимание, что это предполагает, что все страны имеют 2015 ключ — если это неверное предположение, вы можете использовать что-то вроде .get(2015, -1) вместо [2015] .

2. Большое спасибо! Сработало!

Ответ №1:

Вы можете сделать что-то вроде этого:

 data = {
    'Country1': {2015: 5, 2016: 9, 2017: 2},
    'Country2': {2015: 20, 2016: 10, 2017: 5}
}

country_with_max_2015 = max(data, key=lambda k: data[k][2015])
 

В функции max лямбда-функция получит значения 'Country1' и 'Country2' которые могут быть использованы для получения значения 'Country1' из data dict, и поэтому мы можем найти значение ключа 2015 в значениях country .

Ответ №2:

Вы можете использовать цикл for для перебора словаря словарей. Я оставляю это на ваше усмотрение, чтобы решить, как вы хотите отслеживать максимальные значения, которые вы находите.

Это для python3, python2 будет выглядеть немного иначе

 data = {'Country1': {2015: 5, 2016: 9, 2017: 2}, 'Country2': {2015: 20, 2016: 10, 2017: 5}}

for country,sub_dict in data.items():
    print(country)
    print(sub_dict)
    
    for year,value in sub_dict.items():
        print(year,value)
 

Ответ №3:

 data = {'Country1': {2015: 5, 2016: 9, 2017: 2}, 'Country2': {2015: 20, 2016: 10, 2017: 5}}

max_val = 0
for _,inner_dict in data.items():
    max_val = max(inner_dict[2015], max_val)
print(max_val)
 

Итерация по словарю таким образом минимизирует использование ресурсов, особенно если вы имеете дело с большим набором данных