Функция Python Max - Нахождение наибольшего значения в словаре - PullRequest
0 голосов
/ 28 февраля 2019

Мой вопрос касается нахождения наибольшего значения в словаре с использованием функции max.

У меня есть созданный словарь, который выглядит следующим образом:

cc_GDP = {'af': 1243738953, 'as': 343435646, etc}

Я хотел бы иметь возможность простонайдите и распечатайте наивысшее значение ВВП для каждой страны.

Моя лучшая попытка прочитать подобные вопросы заключается в следующем (в настоящее время я работаю над учебником по ускоренному изучению языка Python, в котором была взята основа этого кода).обратите внимание, что функция get_country_code просто предоставляет двухбуквенные сокращения для стран в файле jon GDP_data):

#Load the data into a list
filename = 'gdp_data.json'
with open(filename) as f:
    gdp_data = json.load(f)

cc_GDP` = {}
for gdp_dict in gdp_data:
    if gdp_dict['Year'] == 2016:
        country_name = gdp_dict['Country Name']
        GDP_total = int(gdp_dict['Value'])
        code = get_country_code(country_name)
        if code:
            cc_GDP[code] = int(GDP_total)

print(max(cc_GDP, key=lambda key: cc_GDP[key][1]))

Это обеспечивает следующую ошибку 'TypeError: 'int' object is not subscriptable'

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

Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

0 голосов
/ 28 февраля 2019

Вы можете развернуть .items() метод dict, чтобы получить key-value пары (tuple с) и обработать его следующим образом:

cc_GDP = {'af': 1243738953, 'as': 343435646}
m = max(list(cc_GDP.items()), key=lambda x:x[1])
print(m) #prints ('af', 1243738953)

Выход m в этом случае равен 2- tuple, вы можете получить доступ к ключу 'af' через m[0] и значению 1243738953 через m[1].

0 голосов
/ 28 февраля 2019

Примерно так:

print max(cc_GDP.values())

Это даст вам самое высокое значение, но не ключ.

0 голосов
/ 28 февраля 2019

Ошибка вызвана тем, что вам нужно смотреть на весь словарь, а не только на один элемент.удалите [1] и затем используйте следующую строку:

print(cc_GDP[max(cc_GDP, key=lambda key: cc_GDP[key])])

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

0 голосов
/ 28 февраля 2019

Таким образом, вы в настоящее время извлекаете ключ страны, который имеет наибольшее значение, с помощью этой строки:

country_w_highest_val = max(cc_GDP, key=lambda key: cc_GDP[key]))

Вы, конечно, можете просто посмотреть это снова в словаре:

highest_val = cc_GDP[contry_w_highest_val]

Но проще, полностью игнорировать ключи и просто найти самое высокое значение из всех значений в словаре:

highest_val = max(cc_GDP.values())
...