python辞書型 keyからvalue、valueからkeyを取得する方法

記事内に広告が含まれています。

pythonの辞書型は 中括弧 “{ }” で囲んで定義できます。 コロン : の左側を key と呼び、左側をvalueと呼びます。

#コロン:の左側がkey, 右側がvalue
dict = { "a": 1, "b": 2, "c": 3}

keyからvalueを取得する

辞書型[key]の形式でvalueを取り出すことができます。

dict = { "a": 100, "b": 200, "c": 300}
print(dict["a"]) 
#100

valueからkeyを取得する方法1: valueとkeyを入れ替えた辞書の利用

辞書のkeyとvalueを入れ替えた辞書を用意する方法です。

#引数dicのkeyとvalueを入れ替えた辞書を作成
def inverse_dic(dictionary):
	return {v:k for k,v in dictionary.items()}

#使い方例
dict = { "a": 1, "b": 2, "c": 3}
print(inverse_dict(dict))
#{100:"a", 200:"b", 300:"c"}

この方法の良いところは、valueからkeyの取得を$O(1)$の計算量でできることです。

ただし、valueが複数存在している場合、先頭にあるkeyとvalueの情報は上書きされて消えてしまうことには注意が必要です。

#"c"と"x"に対応するvalueが同じ値
dict2 = { "a": 100, "b": 200, "c": 300, "x":300}

print(inverse_dic(dict2))
#{100:"a", 200:"b", 300:"x"}

valueからkeyを取得する方法2: for文で取り出す

次の方法は単純で、辞書型を先頭からfor文で見て該当のkeyを探す方法です。

dict = { "a": 100, "b": 200, "c": 300}

VALUE = 300 #欲しい値

#key,valueを順番に見ていく
for k,v in dic.items():
    if v==VALUE:
        #該当するkeyに何らかの操作を実行
        print(k)

#c

この方法の良いところは、同じvalueが複数ある場合ももれなく取得することができる点です。

dict2 = { "a": 100, "b": 200, "c": 300, "x":300}

VALUE = 300
for k,v in dic.items():
    if v==VALUE:
        #該当するkeyに何らかの操作を実行
        print(k)

#c
#x

問題点は、計算量が$O(n)$であるため、データの長さに比例して計算時間が増大してしまう点です。

まとめ

pythonの辞書でkeyとvalueの相互の取得方法についてまとめました。

valueからkeyを取り出すには、valueとkeyの立場を入れ替えた辞書を作るか、もしくはfor文で先頭から見ていくかの2つの方法が考えられます。

前者は計算量が$O(1)$で高速ですが、valueが複数ある場合は対応できません。対して後者は、計算量が$O(n)$ですが複数のvalueがあっても対応可能です。

それぞれの一長一短を考えて使う必要があると思います。

5. データ構造
この章では、すでに学んだことについてより詳しく説明するとともに、いくつか新しいことを追加します。 リスト型についてもう少し: リストデータ型には、他にもいくつかメソッドがあります。リストオブジェクトのすべてのメソッドを以下に示します: 以下...

計算量については以下のリンクにまとめられています。

TimeComplexity - Python Wiki



Python
スポンサーリンク

コメント