今回はPythonの型であるDictionaries (ディクショナリー、辞書)について、詳しく見ていきましょう。
未読の方は、先に“リストの使い方”“タプルの使い方”を読んでいただけると理解が深まると思います。



辞書とは

辞書型はマップ型とも呼ばれることがあります。辞書型もリスト同様に複数アイテムの一塊ですが、大きな特徴はkey (キー) とValue (値) が対応していることです。キーと値のセットは辞書内で重複が許されません。またリスト同様に内容を変更することができます。

辞書の作り方

辞書作成: {}, {key:values}

辞書を作成する際は {} でキーと値のセットを囲みます。キーと値は“:” でセットを指定します。キーと値のセットが複数あるときは“,” でつなげていきます。空の辞書を作成する場合は、キーと値を入力しません。

dic1 = {}
dic2 = { 'Sato':'Tokyo', 'Suzuki':'Osaka', 'Kato':'Fukuoka' }

dic1は空の辞書を作成しました。dic2は3つのペアの辞書オブジェクトになります。

辞書型への変換

辞書型への変換: dict()

dict()を使うことで、2つの値が並んだリストを辞書型へ変換することができます。

list1 = [ ['a', 'b'], ['c', 'd'], ['e','f'] ]
list1
Out[1]: [['a', 'b'], ['c', 'd'], ['e', 'f']]
dic3 = dic(list1)
Out[2]:{'a': 'b', 'c': 'd', 'e': 'f'}

上の例では、list1という3つの2ペアの文字列を含むlist1を作成した後に、それを辞書型へ変換しました。
このようにリスト内の2つのペアがそれぞれキーと値にセットされます。

アイテムの操作

値の呼び出し: dic_name[key]
値の変更: dic_name[key] = new value
新しいキーの追加: dic_name[new key] = new value
キーと値のペアを削除: del
キーの有無を確認: key in dic_name
すべてのキーを確認: keys()
すべてのアイテムを削除: clear()

辞書内の値を呼び出すときはキーを指定するだけです。辞書内のアイテムを変更するにはキーを指定していきます。

dic2 = { 'Sato':'Tokyo', 'Suzuki':'Osaka', 'Kato':'Fukuoka' }
dic2['Sato']
Out[3]: 'Tokyo'
dic2['Suzuki'] = 'Nagoya'
dic2
Out[4]: {'Kato': 'Fukuoka', 'Sato': 'Tokyo', 'Suzuki': 'Nagoya'}
dic2['Watanabe'] = 'Sapporo'
dic2
Out[5] {'Kato': 'Fukuoka', 'Sato': 'Tokyo', 'Suzuki': 'Nagoya', 'Watanabe': 'Sapporo'}
del dic2['Kato']
dic2
Out[6]: {'Sato': 'Tokyo', 'Suzuki': 'Nagoya', 'Watanabe': 'Sapporo'}
'Sato' in dic2
Out[7]: True
dic2.keys()
Out[8]: dict_keys(['Sato', 'Suzuki', 'Watanabe'])
dic2.clear()
dic2
Out[9]: {}

初めにdic2からキー”Sato”に対応する値を呼び出しました。
次にキー”Suzuki”に対応する値をOsakaからNagoyaに変更しました。
3つ目の例では新しいキー”Watanabe”を追加しました。
4つ目の例ではキー”Kato”に対応するペアをdic2から削除しました。
5つ目の例ではキー”Sato”がdic2内に含まれているかどうかをチェックしました。無い場合は、’False’が返ってきます。
6つ目の例では、dic2内のすべてのキーを確認しています。
最後にdic2のアイテムをすべて削除しました。



辞書の結合とコピー

辞書を結合: update()
辞書をコピー: =, copy()

2つの辞書をつなげるときにはupdate()を使用します。結合する2つの辞書で同じキーがある場合は2つ目の辞書のキーが有効になるので注意してください。

dic2 = { 'Sato':'Tokyo', 'Suzuki':'Osaka', 'Kato':'Fukuoka' }
dic3 = { 'John':'San Francisco', 'Michael':'New York' }
dic2.update(dic3)
dic2
Out[10]:
{'John': 'San Francisco',
 'Kato': 'Fukuoka',
 'Michael': 'New York',
 'Sato': 'Tokyo',
 'Suzuki': 'Osaka'}
dic4 = { 'Sato':'Tokyo', 'Suzuki':'Osaka', 'Kato':'Fukuoka' }
dic5 = { 'John':'San Francisco', 'Kato':'New York' }
dic4.update(dic5)
dic4
Out[11]: {'John': 'San Francisco',
 'Kato': 'New York',
 'Sato': 'Tokyo',
 'Suzuki': 'Osaka'}

最初の例ではdic2とdic3を作成した後に、dic2へdic3を結合しました。
2つ目ではdic4とdic5を作成した後に、dic4へdic5を結合しました。この時キー’Kato’が両方に含まれていたため、結合した後のdic4では”Kato”に対応する値が2つ目の辞書dic5内の”Kato”に対応する値”New York”へと変更されました。この例のようにキーが重複する場合は2つ目の辞書内の値が優先されるので注意してください。

dic2 = { 'Sato':'Tokyo', 'Suzuki':'Osaka', 'Kato':'Fukuoka' }
dic6 = dic2
dic7 = dic2.copy()
dic6
Out[12]: {'Kato': 'Fukuoka', 'Sato': 'Tokyo', 'Suzuki': 'Nagoya'}
dic7
Out[13]: {'Kato': 'Fukuoka', 'Sato': 'Tokyo', 'Suzuki': 'Nagoya'}
dic2['John'] = 'San Francisco'
dic6
Out[14]: {'John': 'San Francisco',
 'Kato': 'Fukuoka',
 'Sato': 'Tokyo',
 'Suzuki': 'Osaka'}
dic7
Out[15]: {'Kato': 'Fukuoka', 'Sato': 'Tokyo', 'Suzuki': 'Nagoya'}

辞書を新しくコピーするには”=”または”.copy()”を使うことができます。しかし上の例で示したように、”=”の場合は元の辞書が変更された場合、新しい辞書も一緒にされていまいます。一方、”.copy()”の場合は新しい辞書は変更されません。元の辞書を参照し続けるかどうかにより使い分ける必要があるので注意してください。

まとめ

今回はPythonのDictionaries (ディクショナリー、辞書)型 について見てきました。これでリスト、タプル、辞書と基本的な型をマスターしました!

  •  辞書とは
  •  辞書の作り方
  •  辞書への型変換
  •  アイテムの操作
  •  辞書の結合とコピー