#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)
Итерация по словарю таким образом минимизирует использование ресурсов, особенно если вы имеете дело с большим набором данных