我是编程新手,目前参加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))]
的工作方式。这只是抓住它看到的第一个值吗?
谢谢您的帮助!
编辑:对不起,我想我不清楚。我需要传递国家人口,还需要传递国家名称。所以我可以在我的主要功能中打印它们。
答案 0 :(得分:18)
我认为您正在寻找这个:
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
答案 1 :(得分:9)
使用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())
答案 2 :(得分:6)
获取具有最高价值的密钥的有效解决方案:您可以通过以下方式使用max
函数:
highCountry = max(worldInfo, key=lambda k: worldInfo[k][0])
key参数是一个函数,用于指定要用于确定max.max(data [0],国家/地区的国家/地区,country_dict.items()中的数据)的值
显然:
highPop = worldInfo[highCountry][0]