Python 辞書で最大値を求める
-
operator.itemgetter()
メソッドを使って最大値のキーを取得する -
Python 3.x 用の
dict.items()
メソッドを用いて辞書の最大値を持つキーを取得する - 辞書の最大値を持つキーを取得するための一般的でメモリ効率の良い解決策
-
max()
とdict.get()
メソッドを用いて辞書の最大値を持つ鍵を取得する
このチュートリアルでは、Python で最大値を持つキーを取得する方法を説明します。また、Python の以前のバージョンから方法が変更されているため、概念を明確にするためにいくつかのコード例を挙げています。
operator.itemgetter()
メソッドを使って最大値のキーを取得する
Python 辞書の (key, value)
ペアを繰り返すために新しいリストを作成する必要はありません。この目的のために stats.iteritems()
を用いることができます。これは辞書の (key, value)
ペアに対応するイテレータを返します。
オブジェクトから x-th
要素を返す呼び出し可能なオブジェクトを取得するには、operator.itemgetter(x)
メソッドを用いることができます。ここでは、オブジェクトは (key, value)
のペアなので、operator.itemgetter(1)
は 1
のインデックスにある要素、つまり value
を参照します。
最大値を持つキーが欲しいので、これらのメソッドを max
関数にカプセル化します。
このメソッドの基本的な例を以下に示します。
import operator
stats = {"key1": 20, "key2": 35, "key3": 44}
max_key = max(stats.iteritems(), key=operator.itemgetter(1))[0]
print(max_key)
出力:
key3
また、iteritems()
は辞書から項目を追加したり削除したりする際に RunTimeException
を発生させる可能性があることと、dict.iteritems
は Python 3 では削除されていることに注意してください。
Python 3.x 用の dict.items()
メソッドを用いて辞書の最大値を持つキーを取得する
Python 3.x では、dict.items()
メソッドを用いて辞書の key-value
ペアを繰り返すことができます。これは Python 2 の dict.iteritems()
と同じメソッドです。
このメソッドのコード例を以下に示します。
import operator
stats = {"key1": 20, "key2": 35, "key3": 44}
max_key = max(stats.items(), key=operator.itemgetter(1))[0]
print(max_key)
出力:
key3
辞書の最大値を持つキーを取得するための一般的でメモリ効率の良い解決策
興味深いことに、Python 2 と Python 3 の両方で動作する別の解決策があります。この解決策では、キーを得るために lambda
関数を用い、得られた key
が最大であることを保証するために max
メソッドを用います。
このアプローチの基本コードを以下に示します。
import operator
stats = {"key1": 20, "key2": 35, "key3": 44}
max_key = max(stats, key=lambda key: stats[key])
print(max_key)
出力:
key3
max()
と dict.get()
メソッドを用いて辞書の最大値を持つ鍵を取得する
この問題のもう一つの解決策は、組み込みの max()
メソッドを単純に利用することです。最大値を取得するための stats
が用意されており、最大値を持つ key
を返すには dict.get()
メソッドを用います。
以下にコード例を示します。
import operator
stats = {"key1": 20, "key2": 35, "key3": 44}
max_key = max(stats, key=stats.get)
print(max_key)
出力:
key3
Syed Moiz is an experienced and versatile technical content creator. He is a computer scientist by profession. Having a sound grip on technical areas of programming languages, he is actively contributing to solving programming problems and training fledglings.
LinkedIn