web-dev-qa-db-ja.com

辞書で最も高い値を見つける

私はプログラミングに不慣れで、現在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
_

これは私のために働いていますが、これを行う簡単な方法があると思います。また、[next(iter(worldInfo))]がどのように機能するかは100%わかりません。これは、最初に表示される値を取得するだけですか?

よろしくお願いします!

編集:すみません、はっきりしていなかったと思います。国の人口だけでなく国名も渡す必要があります。したがって、メイン関数で両方を印刷できます。

13
Luke Kelly

私はあなたがこれを探していると思います:

max(worldInfo.items(), key=lambda x: x[1][0])

これは国名とその情報の両方を返します。例えば:

('france', [100, 22])

Max()関数はpython "iterables"で機能します。 "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
18
Conner

次のように、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())
9
Eb946207

最も高い値のキーを取得する効率的なソリューション:max関数を次のように使用できます:

highCountry = max(worldInfo, key=lambda k: worldInfo[k][0])

主要な引数は、max.max(data [0]、country for country、country_dict.items()のデータ)を決定するために使用する値を指定する関数です

そして明らかに:

highPop = worldInfo[highCountry][0]
6
Axel Puig