我是编程新手,目前正在上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]