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