a = dict(((1,3),(0,-1),(3,21)))
m = max(a, key=a.get)
なぜこの値が最大値に対応するキーを返すのか説明できますか?それはかなり長い間私を困らせてしまった。ありがとう!python辞書の最大値に対応するキー
a = dict(((1,3),(0,-1),(3,21)))
m = max(a, key=a.get)
なぜこの値が最大値に対応するキーを返すのか説明できますか?それはかなり長い間私を困らせてしまった。ありがとう!python辞書の最大値に対応するキー
辞書 "a"は、Pythonの反復可能な構造体です。 for x in a
でループスルーすると、辞書のキーをループします。
2番目の行では、max関数は、反復可能オブジェクト(a)とオプションの "key"関数の2つの引数をとります。 Key関数は、aの中の項目の値を評価するために使用されます。最も大きいものが返されます。
例:
>>> a = dict(((1,3),(0,-1),(3,21)))
>>> for x in a:
... print x #output the value of each item in our iteration
...
0
1
3
注ここでの唯一の "鍵" が出力されます。これらの各キーを「取得」するときに...
>>> a.get(0)
-1
>>> a.get(1)
3
>>> a.get(3)
21
各キーの値が取得されます。 maxがどのように機能するか見てみましょう。
>>> b=[2, 3, 5, 6, 4]
>>> max(b)
6
>>> def inverse(x):
... return 1.0/x
...
>>> max(b, key=inverse)
2
ご覧のとおり、max(デフォルト)は、反復可能リスト内で最大の番号を見つけます。逆関数を定義すると、bの中で最も大きいアイテムが返されます。その中ではinverse(item)
が最大です。
これら二つのアイテムを組み合わせて、我々はmax(a, key=a.get)
がa.get(item)
の値が最大となるためa
でitem
を返すために起こっていることがわかります。すなわち、最も大きな値に対応するキー。
key
パラメータの仕組みを尋ねていますか?これは呼び出し可能で、辞書のすべての要素に適用されます。あなたの辞書の場合、それは単にこの行います
a.get(1) # 3
a.get(0) # -1
a.get(3) # 21
max
を、比較値としてキー関数の結果を使用していますので、それは明らかにすなわち3
本当に興味があるなら、ラムダ関数を使うこともできます: 'max(a、key = lambda x:a [x])' – ProdigySim