在字典中寻找最高价值

时间:2018-12-04 02:03:53

标签: python dictionary computer-science

我是编程新手,目前参加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))]的工作方式。这只是抓住它看到的第一个值吗?

谢谢您的帮助!

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

3 个答案:

答案 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]