Python 辞書で最大値を見つける

  1. operator.itemgetter() メソッドを使って最大値のキーを取得する
  2. Python 3.x 用の dict.items() メソッドを用いて辞書の最大値を持つキーを取得する
  3. 辞書の最大値を持つキーを取得するための一般的でメモリ効率の良い解決策
  4. 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

注: 44 の値を持つ別のキーがあったとしても、このメソッドは 2つの同じ最大値のうちの 1つを返します。

また、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

関連記事 - Python Dictionary

  • Python の辞書にキーが存在するかどうかを確認する方法
  • Python で辞書の値を変更する