Нахождение наибольшего значения в словаре - PullRequest
0 голосов
/ 04 декабря 2018

Я новичок в программировании и в настоящее время беру класс CSC 110.Наше задание состоит в том, чтобы создать набор функций, которые выполняют всевозможные действия с некоторыми данными.Я взял все эти данные и поместил их в словарь, но у меня возникли некоторые проблемы с получением нужных мне данных.

Вот моя проблема:

У меня есть словарь, которыйхранит список стран, за которыми следует список, в который входит их население и ВВП.Отформатированный примерно такфункция (эта предназначена специально для наибольшего населения, но все они выглядят примерно одинаково).

def highestPop(worldInfo):
        highPop = worldInfo[next(iter(worldInfo))][0] #Grabs first countries Population
        highCountry = next(iter(worldInfo))#Grabs first country in worldInfo

        for k,v in worldInfo.items():
                if v[0] > highPop:
                    highPop = v[0]
                    highCountry = k

        return highPop,highCountry

Хотя это работает для меня, я должен думать, что есть более простой способ сделать это.Также я не уверен на 100%, как работает [next(iter(worldInfo))].Это просто захватывает первое значение, которое он видит?

Спасибо за вашу помощь заранее!

Редактировать: Извините, я думаю, я не был ясен.Мне нужно передать население стран, а также название страны.Таким образом, я могу напечатать их обоих в своей основной функции.

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

Эффективное решение для получения ключа с наибольшим значением: вы можете использовать функцию max следующим образом:

highCountry = max(worldInfo, key=lambda k: worldInfo[k][0])

Аргументом ключа является функция, которая определяет, какие значения вы хотите использовать дляопределить max.max (данные [0], страна для страны, данные в country_dict.items ())

И, очевидно:

highPop = worldInfo[highCountry][0]
0 голосов
/ 04 декабря 2018

Я думаю, что вы ищете это:

max(worldInfo.items(), key=lambda x: x[1][0])

Это вернет и название страны, и ее информацию.Например:

('france', [100, 22])

Функция max () может работать с «итерациями» Python, которые являются причудливым словом для всего, что можно циклически повторять или циклически повторять.Таким образом, он циклически повторяет то, что вы положили в него, и выплевывает предмет, который является самым высоким.

Но как он определяет, какой кортеж самый высокий?Что выше: Франция или Германия?Вы должны указать ключ (некоторая спецификация для того, чтобы судить о каждом предмете).Ключ = лямбда и т. Д. Определяет функцию, которая дает элемент (x), оценивает этот элемент на основе x[1][0].В этом случае, если элемент равен ('france', [100, 22]), тогда x[1][0] равен 100. Таким образом, x[1][0] каждого элемента сравнивается и возвращается элемент с самым высоким значением.

Next () и iter () функции для итераторов Python.Например:

mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)

print(next(myit)) #=> apple
print(next(myit)) #=> banana
print(next(myit)) #=> cherry
0 голосов
/ 04 декабря 2018

Используйте функцию max(), например, так:

max(item[0] for item in county_dict.values()) #use item[1] for GDP!

Также попробуйте сохранить значения не в списке ([a, b]), а в кортеже ((a, b)).

Редактировать: Как сказал в комментариях iamanigeeit, это также дает вам название страны:

max(data[0], country for country, data in country_dict.items())
...