私はプログラミングに不慣れで、現在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%わかりません。これは、最初に表示される値を取得するだけですか?
よろしくお願いします!
編集:すみません、はっきりしていなかったと思います。国の人口だけでなく国名も渡す必要があります。したがって、メイン関数で両方を印刷できます。
私はあなたがこれを探していると思います:
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
次のように、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 for country、country_dict.items()のデータ)を決定するために使用する値を指定する関数です
そして明らかに:
highPop = worldInfo[highCountry][0]