在字典中查找最高值



我是编程新手,目前正在上CSC 110课程。 我们的任务是创建一个集合函数,这些函数使用给定的一些数据执行各种操作。 我已经获取了所有这些数据并将其放入字典中,但是我在获取所需的数据时遇到了一些麻烦。

这是我的问题:

我有一本字典,里面存储了一堆国家,后面是一个包括他们的人口和GDP的列表。 格式化如下内容

{'country': [population, GDP], ...}

我的任务是循环浏览并找到人口或 GDP 最高的国家,然后打印:

'The country with the highest population is ' + highCountry+
' with a population of ' + format(highPop, ',.0f')+'.')

为了做到这一点,我写了这个函数(这个函数专门针对最高人口,但它们看起来都差不多)。

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))]是如何工作的。这是否只是抓住了它看到的第一个值?

提前感谢您的帮助!

编辑:对不起,我想我不清楚。 我需要传递国家人口和国家名称。所以我可以在我的主函数中打印它们。

我想你正在寻找这个:

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

这将返回国家/地区名称及其信息。例如:

('france', [100, 22])

max() 函数可以在 python "iterables" 上工作,这是一个花哨的词,表示任何可以循环或循环通过的东西。因此,它会循环或循环穿过你放入其中的东西,并吐出最高的物品。

但是它如何判断哪个元组最高?哪个更高:法国和德国?您必须指定一个键(有关如何判断每个项目的一些规范)。key=lambda 等指定了一个函数,该函数给定一个项目(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

使用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())

获取具有最高值的密钥的有效解决方案:您可以通过以下方式使用max函数:

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

key 参数是一个函数,用于指定要用于确定 max.max(data[0]、国家/地区、country_dict.items() 中的数据)

显然:

highPop = worldInfo[highCountry][0]

最新更新