Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの辞書で値からキーを取得する2つの方法

Pythonの辞書(dict)は「キー」と「値」のペアでデータを管理するコレクションです。通常はキーを指定して値を取り出しますが、この記事ではその逆――値がわかっているときに、対応するキーを取得する方法を2つ紹介します。

方法1:keys()・values()・index()を組み合わせる

辞書のkeys()メソッドとvalues()メソッドでそれぞれキーと値のリストを作成し、リストのindex()メソッドで目的の値の位置を特定します。キーと値は同じ順序で並んでいるため、同じインデックスを指定すれば対応するキーが取得できます。

サンプルコード

dictA = {"Mon": 3, "Tue": 11, "Wed": 8}

# キーと値をそれぞれリスト化
keys = list(dictA.keys())
vals = list(dictA.values())

print(keys[vals.index(11)])
print(keys[vals.index(8)])

# 1行で書く場合
print(list(dictA.keys())[list(dictA.values()).index(3)])

実行結果

Tue
Wed
Mon

方法2:items()でループして検索する

items()メソッドを使って辞書の各要素(キーと値のペア)を順番に取り出し、引数で渡された値と比較する関数を作成します。一致する値が見つかればそのキーを返し、見つからなければその旨を返します。

サンプルコード

dictA = {"Mon": 3, "Tue": 11, "Wed": 8}

def get_key(val):
    for key, value in dictA.items():
        if val == value:
            return key
    return "key doesn't exist"

print(get_key(11))
print(get_key(3))
print(get_key(10))

実行結果

Tue
Mon
key doesn't exist

補足:next()を使った簡潔な書き方

next()関数とジェネレータ式を組み合わせると、より簡潔に記述できます。値が見つからない場合のデフォルト値も指定できるため、実務でもよく使われるパターンです。

dictA = {"Mon": 3, "Tue": 11, "Wed": 8}

key = next((k for k, v in dictA.items() if v == 11), None)
print(key)  # Tue

まとめ

辞書は本来キーから値を引くための構造なので、値からキーを逆引きする場合は線形探索(計算量O(n))になります。頻繁に逆引きが必要な場合は、「値→キー」の対応を持つ別の辞書を用意しておくと効率的です。また、同じ値が複数のキーに紐づいている場合、これらの方法では最初に一致したキーのみが返される点にも注意しましょう。

  1. Pythonの辞書(dict)から特定のキーの値を取得する方法をわかりやすく解説

    Pythonの辞書(dict)から特定のキーに対応する値を取得するには、主に2つの方法があります。1つ目は角括弧 [] 演算子を使う方法、2つ目は get() メソッドを使う方法です。それぞれの使い方と違いを詳しく見ていきましょう。 方法1:角括弧 [] を使って値を取得する 最も基本的な方法は、辞書に対して [] 演算子を使い、引数としてキーを渡すことです。 サンプルコード my_dict = {name: TutorialsPoint, time: 15 years, location: India} print(my_dict[name]) print(my_dict[time]) 実行

  2. Pythonの辞書からキーを削除する方法を解説!del文・pop()・popitem()の使い分け

    はじめに Pythonの辞書(dict)は、キーと値のペアでデータを管理できる非常に便利なデータ構造です。プログラムの実行中に不要になった要素を削除したい場面は多くありますが、Pythonにはいくつかの削除方法が用意されています。 この記事では、代表的な削除方法であるdel文とpop()メソッドを中心に、それぞれの特徴や使い分けのポイントを実行例とともにわかりやすく解説します。 del文でキーを削除する Pythonのdelキーワードは、ほぼすべてのオブジェクトに対して使用できます。辞書から特定の要素を削除する場合は、delステートメントにキーを指定します。 >>> D1