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
コメント