[Python]04章-07 いろいろなデータ構造（ディクショナリの操作）

#[Python]04章-07 ディクショナリの操作
ディクショナリは、キーについてはイミュータブルのため操作ができないことは説明しましたが、値についてはミュータブルのため、操作が可能です。
今回はディクショナリの操作について説明していきたいと思います。

##ディクショナリの要素の追加
まずは、要素の追加について説明します。
**Python Console**から以下のコードを入力してください。

```.py
>>> foodD = {'a' : 'apple', 'b' : 'banana', 'c': 'cake'}
>>> foodD
{'a': 'apple', 'b': 'banana', 'c': 'cake'}
```

ここまでは前回説明した通り、ディクショナリの作成となります。
では、ディクショナリの変数**foodD**に要素を追加してみますが、追加方法には2つあります。

####1つの要素の追加方法について
まずは1つの要素を追加する方法を説明します。
**Python Console**に以下のコードを入力してください。一度変数**foodD**の内容を表示してから実行します。

```.py
>>> foodD
{'a': 'apple', 'b': 'banana', 'c': 'cake'}
>>> foodD['d'] = 'dragon fruits'
>>> foodD
{'a': 'apple', 'b': 'banana', 'c': 'cake', 'd': 'dragon fruits'}
```

ディクショナリに要素を追加する際には、**変数名[キー] = 値**という形で要素を新たに追加していきます。

では、すでにキーがあった際にはどうなるでしょうか？
**Python Console**に以下のコードを入力してください。一度変数**foodD**の内容を表示してから実行します。

```.py
>>> foodD
{'a': 'apple', 'b': 'banana', 'c': 'cake', 'd': 'dragon fruits'}
>>> foodD['c'] = 'carrot'
>>> foodD
{'a': 'apple', 'b': 'banana', 'c': 'carrot', 'd': 'dragon fruits'}
```
**'c'**の個所が上書きされていることを確認できます。実は1つのディクショナリについて、**重複したキーは指定できません。**重複していた場合は、別の値を上書きすることになります。

####複数の要素の追加方法について
ディクショナリに複数の要素を追加するには、**updateメソッド**を利用します。
**Python Console**に以下のコードを入力してください。一度変数**foodD**の内容を表示してから実行します。

```.py
>>> foodD
{'a': 'apple', 'b': 'banana', 'c': 'carrot', 'd': 'dragon fruits'}
>>> foodD.update({'e' : 'egg', 'f' : 'fried potato'})
>>> foodD
{'a': 'apple', 'b': 'banana', 'c': 'carrot', 'd': 'dragon fruits', 'e': 'egg', 'f': 'fried potato'}
```
別の辞書をマージしている形式となります。**foodD**を確認すると、**'e'**と**'f'**が追記されていることを確認できます。

##ディクショナリの要素の削除
ディクショナリの要素もキーを指定して削除することができます。実はリストと同じく、**del文**を使用して削除ができます。
**Python console**に以下のコードを入力してください。一度変数**foodD**の内容を表示してから実行します。

```.py
>>> foodD
{'a': 'apple', 'b': 'banana', 'c': 'carrot', 'd': 'dragon fruits', 'e': 'egg', 'f': 'fried potato'}
>>> del foodD['b']
>>> foodD
{'a': 'apple', 'c': 'carrot', 'd': 'dragon fruits', 'e': 'egg', 'f': 'fried potato'}
```
**'b'**が削除されているのが確認できました。

また、ディクショナリの全要素を削除するには、リストと同じく**clearメソッド**を使用します。

```.py
>>> foodD
{'a': 'apple', 'c': 'carrot', 'd': 'dragon fruits', 'e': 'egg', 'f': 'fried potato'}
>>> foodD.clear()
>>> foodD
{}
```
ディクショナリの全要素が削除されて、**{ }**が出力され、空であることを確認できます。

##ディクショナリの要素の探索
ディクショナリでも要素の探索は可能です。今回もキーを指定して探索していきます。
前節では**変数名[キー]**を指定して探索しましたが、もし該当するキーがないとエラーが出力されます。
今回はキーがない場合でもエラーが出力されない方法を説明します。

**Python console**に以下のコードを入力してください。まずは**D**にディクショナリを代入していきます。

```.py
>>> D = {'NRT' : '成田空港', 'CTS' : '新千歳空港', 'HIJ' : '広島空港'}
>>> D
{'NRT': '成田空港', 'CTS': '新千歳空港', 'HIJ': '広島空港'}
```

キーがない場合でもエラーが出力されない方法として、**getメソッド**を使用します。

```.py
>>> D
{'NRT': '成田空港', 'CTS': '新千歳空港', 'HIJ': '広島空港'}
>>> D.get('NRT')
'成田空港'
>>> D.get('MYJ')

```

まず、**'NRT'**は**D**に存在するので、**'成田空港'**が返ってきます。**'MYJ'**については**D**に存在しないため、何も返ってきません。

ちなみに、print関数を用いて存在しないキーを指定すると、**None**と返ってきます。

```.py
>>> print(D.get('MYJ'))
None
```

他にも、リストの時に説明した、in演算子を使うことでも存在を確認できます。リストとは異なり、キーを指定して確認します。

```.py
>>>'NRT' in D
True
>>>'MYJ' in D
False
```

##最後に
ディクショナリについて一通り見てきましたが、基本的にはリストとほぼ同じ操作であることは確認できたかと思います。違いとしては要素の番号を指定するリストに対して、ディクショナリはキーを指定するという点です。今後もよく出てくるデータ構造ですので押さえておきましょう。

###[【目次リンク】へ戻る](https://qiita.com/ko0821/items/379e8bd9e6ea01089419)