Python - 辞書

辞書

辞書は、リストに似ていますが要素の順序が管理されていないため、要素を選択するときにはオフセットを使わず、個々の値に一意なキーを使います。他の言語では、辞書は連想配列、ハッシュ、ハッシュマップなどと呼ばれています。

辞書を作るには、key : value のペアを , で区切って並べ、{} で囲みます。もっとも単純な辞書は、キー/値ペアを持たない空辞書です。

empty_dict = {}
print(empty_dict)
# {}
空辞書の作成

key : value のペアは、以下のように書くことができます。対話型インタープリタで辞書の名前を入力すると、その中のキーと値がすべて表示されます。キーを指定すると、対応する値が取得できます。辞書に存在しないキーを指定すると KeyError が発生します。

dict = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
print(dict)
# {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

print(dict['key1'])
# value1
辞書の作成と取得

dict() 関数を使うと、ふたつの値のシーケンスを辞書に変換できます。ただし、辞書内のキーの順序は決まっておらず、要素を追加したときの順序とは異なる場合があるため注意が必要です。

list = [ ['a', 'b'], ['c', 'd'], ['e', 'f'] ]
print(dict(list))
# {'c': 'd', 'a': 'b', 'e': 'f'}
dict() 関数を使った変換

dict() 関数の変換は、2 要素のシーケンスを含むものなら何でも変換できます。

# 2 要素のタプルのリスト
list1 = [ ('a', 'b'), ('c', 'd'), ('e', 'f') ]
print(dict(list1))
# {'c': 'd', 'a': 'b', 'e': 'f'}

# 2 要素のリストのタプル
list2 = ( ['a', 'b'], ['c', 'd'], ['e', 'f'] )
print(dict(list2))
# {'c': 'd', 'a': 'b', 'e': 'f'}

# 2 字の文字列のリスト
list3 = [ 'ab', 'cd', 'ef' ]
print(dict(list3))
# {'c': 'd', 'a': 'b', 'e': 'f'}

# 2 文字の文字列のタプル
list4 = ( 'ab', 'cd', 'ef' )
print(dict(list4))
# {'c': 'd', 'a': 'b', 'e': 'f'}
dict() 関数を使った変換

要素の追加と変更

辞書に要素を追加するには、キーを使って要素を参照し、値を代入します。辞書にそのキーが既にある場合には、既存の値が新しい値に上書きされます。キーがまだ存在しない場合には、キーと値のペアが追加されます。

dict = {
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': 'value3'
    }
print(dict)
# {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

dict['key4'] = 'value4'
print(dict)
# {'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4'}
value1
辞書に要素を追加

辞書のキーは一意でなければなりません。既に存在しているキーを指定すると、既存の値が新しい値に上書きされます。

dict = {
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': 'value3'
    }
print(dict)
# {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

dict['key1'] = 'value10'
print(dict)
# {'key1': 'value10', 'key2': 'value2', 'key3': 'value3'}
辞書の要素を変更

キーを複数回使って定義した場合、最後に定義した値が辞書に残ります。下記は、key1 というキーにまず value1 という値を代入し、そこから value2value3 という順番で値を置き換えています。

dict = {
    'key1': 'value1', 
    'key1': 'value2', 
    'key1': 'value3'
    }
print(dict)
# {'key1': 'value3'}
辞書のキーが複数回定義された場合の動作

辞書を結合する: update()

update() 関数を使えば、辞書のキーと値を別の辞書にコピーすることができます。

dict1 = {
    'key1': 'value1', 
    'key2': 'value2'
    }
print(dict1)
# {'key1': 'value1', 'key2': 'value2'}

dict2 = {
    'key3': 'value3', 
    'key4': 'value4'
    }
print(dict2)
# {'key3': 'value3', 'key4': 'value4'}

dict1.update(dict2)
print(dict1)
# {'key1': 'value1', 'key2': 'value2', 'key3': 'value3', 'key4': 'value4'}
辞書の結合

] 1つ目の辞書と2つ目の辞書に同じキーが含まれている場合、2つ目の辞書の値が残ります。

dict1 = {
    'key1': 'value1', 
    'key2': 'value2'
    }
print(dict1)
# {'key1': 'value1', 'key2': 'value2'}

dict2 = {
    'key1': 'value10', 
    'key2': 'value20'
    }
print(dict2)
# {'key1': 'value10', 'key2': 'value20'}

dict1.update(dict2)
print(dict1)
# {'key1': 'value10', 'key2': 'value20'}
辞書の結合

要素を削除する: del, clear()

要素を削除するためには del を使用します。

dict = {
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': 'value3'
    }
print(dict)
# {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

del dict['key1']
print(dict)
# {'key2': 'value2', 'key3': 'value3'}
辞書の要素を削除

すべての要素を削除するためには clear() 関数を使用します。

dict = {
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': 'value3'
    }
print(dict)
# {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

dict.clear()
print(dict)
# {}
辞書の要素をすべて削除

要素を取得する

辞書にあるキーが含まれているか知りたい場合には in を使います。

dict = {
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': 'value3'
    }
print('key1' in dict)
# True
print('key4' in dict)
# False
辞書にキーが存在するかテストする

辞書から要素を取得するための一般的な方法はキーを指定して、対応する値を取り出します。もしも辞書に存在しないキーを指定した場合、KeyError が発生します。

dict = {
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': 'value3'
    }
print(dict['key1'])
# value1
キーを指定して対応する値を取り出す

KeyError を避けるための方法はふたつあります。ひとつは、事前に in を使ってキーが存在することを確認する方法です。もうひとつは、辞書専用の get() 関数を使う方法です。get() 関数では、キーとオプションを指定することができ、キーがなければ指定したオプションが返されます。オプションを指定しない場合、None が返されます。

dict = {
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': 'value3'
    }
print(dict.get('key1', 'not exist in dict'))
# value1
    
print(dict.get('key4', 'not exist in dict'))
# not exist in dict
get() 関数を使用して要素を取り出す

keys() 関数を使えば、辞書のすべてのキーを取得できます。

dict = {
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': 'value3'
    }
print(dict.keys())
# dict_keys(['key1', 'key2', 'key3'])
keys() 関数を使用してすべてのキーを取得する

values() 関数を使えば、辞書のすべての値を取得できます。

dict = {
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': 'value3'
    }
print(dict.values())
# dict_values(['value1', 'value2', 'value3'])
values() 関数を使用してすべての値を取得する

辞書からすべてのキー/値のペアを取り出したい場合は、items() を使います。

dict = {
    'key1': 'value1', 
    'key2': 'value2', 
    'key3': 'value3'
    }
print(dict.items())
# dict_items([('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')])
items() 関数を使用してすべてのキー/値ペアを取得する

関連記事