在字典中查找最高值

Luk*_*lly 13 python computer-science dictionary

我是编程新手,目前参加CSC 110课程.我们的任务是创建一组函数,使用给定的一些数据执行各种操作.我已经把所有数据都放到了字典中,但是我在获取我想要的数据时遇到了一些麻烦.

这是我的问题:

我有一个字典,存储了一堆国家,后面是一个包含人口和GDP的列表.格式化这样的东西

{'country': [population, GDP], ...}
Run Code Online (Sandbox Code Playgroud)

我的任务是遍历这个并找到人口或GDP最高的国家然后打印:

'The country with the highest population is ' + highCountry+\
    ' with a population of ' + format(highPop, ',.0f')+'.')
Run Code Online (Sandbox Code Playgroud)

为了做到这一点,我写了这个函数(这个函数专门用于最高人口,但它们看起来都是一样的).

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
Run Code Online (Sandbox Code Playgroud)

虽然这对我有用,但我认为有一种更简单的方法可以做到这一点.另外,我不是100%确定如何[next(iter(worldInfo))]运作.这只是抓住它看到的第一个值吗?

感谢您的帮助!

编辑:对不起我想我不清楚.我需要通过国家人口以及国家名称.所以我可以在我的主要功能中打印它们.

Con*_*ner 18

我想你正在寻找这个:

max(worldInfo.items(), key=lambda x: x[1][0])
Run Code Online (Sandbox Code Playgroud)

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

('france', [100, 22])
Run Code Online (Sandbox Code Playgroud)

max()函数可以在python"iterables"上运行,这对任何可以循环或循环的东西来说都是一个奇特的词.因此,它会循环或循环放入您放入的物品并吐出最高的物品.

但它如何判断哪个元组最高?哪个更高:法国还是德国?您必须指定一个键(一些关于如何判断每个项目的规范).key = lambda等指定一个给定item(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
Run Code Online (Sandbox Code Playgroud)

  • @RonJohn我老了,胡思乱想,但我也懒得重写已经存在的东西. (4认同)
  • @JollyJoker你是**学生**("新编程和目前参加CSC 110课程"),因此**需要**为自己写 - 至少一次 - 你自己的min(), max(),冒泡排序,快速排序,链表,二叉树,散列等实现. (2认同)

Eb9*_*207 9

使用该max()功能,如下所示:

max(item[0] for item in county_dict.values()) #use item[1] for GDP!
Run Code Online (Sandbox Code Playgroud)

另外,尝试将值存储在list([a, b])中但不存储在元组((a, b))中.

编辑:就像iamanigeeit在评论中所说,这也可以为您提供国家/地区名称:

max(data[0], country for country, data in country_dict.items())
Run Code Online (Sandbox Code Playgroud)


Axe*_*uig 6

获得具有最高价值的密钥的有效解决方案:您可以这样使用该max功能:

highCountry = max(worldInfo, key=lambda k: worldInfo[k][0])
Run Code Online (Sandbox Code Playgroud)

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

显然:

highPop = worldInfo[highCountry][0]
Run Code Online (Sandbox Code Playgroud)