繁体   English   中英

在字典中寻找最高价值

[英]Finding highest value in a dictionary

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

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

显然:

highPop = worldInfo[highCountry][0]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM