パイソン |ディクショナリの値からキーを取得する
Python 辞書で値によってキーを取得する方法を見てみましょう。
例: ワンライナーコード
Python3
# creating a new dictionary> my_dict> => {> 'Java'> :> 100> ,> 'Python'> :> 112> ,> 'C'> :> 11> }> # one-liner> print> (> 'One line Code Key value: '> ,> list> (my_dict.keys())> > [> list> (my_dict.values()).index(> 100> )])> |
出力:
Java
値を使用して Python 辞書からキーを抽出する
方法 1: リスト内包表記を使用して値によってキーを取得する
リスト内包表記は、式を含む括弧で構成されます。この式は、for ループとともに要素ごとに実行され、Python リスト内の各要素を反復処理して、値からキーを取得します。 辞書 。
Python3
dic> => {> 'geeks'> :> 'A'> ,> 'for'> :> 'B'> ,> 'geeks'> :> 'C'> }> value> => {i> for> i> in> dic> if> dic[i]> => => 'B'> }> print> (> 'key by value:'> ,value)> |
出力:
key by value: {'for'} 時間計算量: の上)
補助スペース: ○(1)
方法 2: list.index() を使用して値によってキーを取得します。
の Index() メソッド リスト内の対応する値のインデックスを返します。ここで使用されるアプローチは、キーと値の 2 つの別々のリストを見つけることです。次に、次を使用してキーを取得します。 位置 価値の val_list 内。 key_list の任意の位置 N のキーは、val_list の位置 N に対応する値を持ちます。
Python3
# creating a new dictionary> my_dict> => {> 'java'> :> 100> ,> 'python'> :> 112> ,> 'c'> :> 11> }> # list out keys and values separately> key_list> => list> (my_dict.keys())> val_list> => list> (my_dict.values())> # print key with val 100> position> => val_list.index(> 100> )> print> (key_list[position])> |
出力:
java
時間計算量: ○(1)
補助スペース: ○(1)
方法 3: dict.item() を使用して値によってキーを取得します。
dict.item() を使用してすべての値を照合し、対応するキーを指定された値に出力することで、値からキーを取得することもできます。
Python3
# function to return key for any value> def> get_key(val):> > > for> key, value> in> my_dict.items():> > if> val> => => value:> > return> key> > return> 'key doesn't exist'> # Driver Code> my_dict> => {> 'Java'> :> 100> ,> 'Python'> :> 112> ,> 'C'> :> 11> }> print> (get_key(> 100> ))> print> (get_key(> 11> ))> |
出力
Java C
時間計算量: O(n)。n は辞書内のキーと値のペアの数です。
補助スペース: O(1)。関数によって使用されるスペースは入力辞書のサイズに依存しないためです。
方法 4: ラムダと filter() を使用する
以下は、filter() 関数を使用して辞書内の値に対応するキーを取得する例です。
Python3
my_dict> => {> 'Java'> :> 100> ,> 'Python'> :> 112> ,> 'C'> :> 11> }> # Get the key corresponding to value 100> key> => list> (> filter> (> lambda> x: my_dict[x]> => => 100> , my_dict))[> 0> ]> print> (key)> #This code is contributed by Edula Vinay Kumar Reddy> |
出力
Java
この例では、filter() 関数を使用して、値が 100 に等しい my_dict からキーのリストを作成します。次に、結果のリストの位置 0 にインデックスが付けられ、値に対応するキーである最初の要素を取得します。 100。
時間計算量: O(n) これは、filter() 関数がキーのリストを作成するために辞書全体を反復処理する必要があるためです。
補助スペースは O(n) これは、filter() によって作成されるキーのリストのサイズが辞書内の要素の数と等しいためです。
方法5:アイテムを使う方法
このコードは、リスト内包表記を使用して辞書内の項目を反復処理し、値が指定された値と一致するかどうかを確認することにより、辞書内の指定された値のキーを検索します。キーが見つかった場合は、リストに追加され、リストの最初の要素が指定された値のキーとして出力されます。値が辞書に見つからない場合は、値が見つからなかったことを示すメッセージが出力されます。
手順:
- ディクショナリの items メソッドを使用して、my_dict 内の各キーと値のペアをループします。
- 現在のキーに関連付けられている値が指定された値と等しいかどうかを確認します。
- 等しい場合は、現在のキーをキーのリストに追加します。
- 一致する値が見つからないままループが完了した場合は、値が見つからなかったことを示すメッセージを出力します。
- 一致するキーが見つかった場合は、リストの最初のキーを出力します。
Python3
# input list> my_dict> => {> 'Java'> :> 100> ,> 'Python'> :> 112> ,> 'C'> :> 11> }> value> => 112> key_list> => [key> for> key, val> in> my_dict.items()> if> val> => => value]> if> len> (key_list)>>> 0> :> > print> (> 'The key for the value'> , value,> 'is'> , key_list[> 0> ])> else> :> > print> (> 'Value not found in dictionary'> )> |
出力
The key for the value 112 is Python
時間計算量: O(N)、 ここで、n は辞書内のキーと値のペアの数です。
補助スペース:O(K) ここで、k は指定された値に一致するキーの数です。
方法6:reモジュールを使用する
このプログラムは、Python の re モジュールを使用して、与えられた値に対応する辞書内のキーを検索します。単語の境界で囲まれた値に一致する正規表現パターンを作成し、 next() 関数を使用して辞書内の項目を反復処理し、パターンに一致する値を検索します。一致するものが見つかった場合、プログラムは対応するキーを返します。
アルゴリズム:
- 探している値に一致する正規表現パターンを単語境界で囲んで作成します。
- next() 関数を使用して辞書内の項目を反復処理し、パターンに一致する値を検索します。
- 一致するものが見つかった場合は、対応するキーを返します。それ以外の場合は、None を返します。
Python3
import> re> # Given input> my_dict> => {> 'Java'> :> 100> ,> 'Python'> :> 112> ,> 'C'> :> 11> }> value> => 100> # Program code> pattern> => re.> compile> (r> ''> +> str> (value)> +> r> ''> )> key> => next> ((k> for> k, v> in> my_dict.items()> if> pattern.search(> str> (v))),> None> )> print> (key)> |
出力
Java
時間計算量: O(N)、 正規表現パターンの作成には O(1) 時間がかかります。各辞書項目のパターンに一致する値の検索には、最悪の場合でも O(n) 時間がかかります (n は辞書内の項目の数です)。 next() 関数と if ステートメントにはそれぞれ O(1) 時間がかかります。したがって、プログラム全体の時間計算量は O(n) になります。
補助スペース: O(1)、 正規表現パターンとキー変数にはそれぞれ O(1) スペースが必要です。 next() 関数内のパターン変数とジェネレーター式には両方とも O(1) スペースが必要です。ジェネレーター式で使用される k 変数と v 変数は、反復の一部として作成されるため、追加のスペースは必要ありません。したがって、プログラムの全体的な空間複雑さは O(1) です。