Pythonの辞書型を使ってみる

## 環境
Python 3.6.5 :: Anaconda, Inc.

```python
$ python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 26 2018, 08:42:37) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
```
このようにインタープリタを起動する。
注意！コードに含まれる「>>>」や「...」はインタープリタの表示を再現しているものなので、SublimeText、VSCode、Pycharmなどのテキストエディタでコードを書く場合は省略可能。

## 辞書型の基礎

### 辞書を作る

```python
>>> d = {'x': 10, 'y': 20}
>>> d
{'x': 10, 'y': 20}
>>> type(d)
<class 'dict'>
```
このような形式でキーと値を入力し、Pythonでは辞書を作ることができる。
typeで調べたところ'dict'と出力されるが、これがdictionaryすなわち辞書のこと。

### 辞書中の特定の値を出力する

```python
>>> d = {'x': 10, 'y': 20}
>>> d
{'x': 10, 'y': 20}
>>> d['x']
10
>>> d['y']
20
```
インデックス番号ではなくキーを指定してあげることで、対応する値を出力することができる。

### 辞書中の特定の値を書き換える

```python
>>> d = {'x': 10, 'y': 20}
>>> d
{'x': 10, 'y': 20}
>>> d['x'] = 100
>>> d['x']
100
>>> d['x'] = 'Bob'
>>> d
{'x': 'Bob', 'y': 20}
```
キーを指定した上で値を入れてあげれば書き換わる。もちろん、文字列で書き換えることも可能。

### 辞書に新たなキーと値を追加する

```python
>>> d
{'x': 'Bob', 'y': 20}
>>> d['z'] = 300
>>> d
{'x': 'Bob', 'y': 20, 'z': 300}
```
辞書に存在しないキーを指定して値を入力してあげることで、辞書に新たなキーと値を追加することができる。
また、dに今存在しているキーは全て文字列だが、下記のように数字をキーにすることも出来る。

```python
>>> d
{'x': 'Bob', 'y': 20, 'z': 300}
>>> d[1] = 400
>>> d
{'x': 'Bob', 'y': 20, 'z': 300, 1: 400}
```

### 辞書の作り方(別ルート)
冒頭で紹介した以外にも、下記のような書き方で辞書を作ることも出来る。

```python
>>> dict(a=10, b=20)
{'a': 10, 'b': 20}
```

```python
>>> dict([('a', 10), ('b', 20)])
{'a': 10, 'b': 20}
```

## 辞書型のメソッド
まずは辞書を作る。

```python
>>> d = {'a': 10, 'b': 20}
>>> d
{'a': 10, 'b': 20}
```
辞書型のメソッドは下記のようにhelpを使うことで一覧を見ることが出来る。

```python
>>> help(d)

Help on dict object:

class dict(object)
 |  dict() -> new empty dictionary
 |  dict(mapping) -> new dictionary initialized from a mapping object's
 |      (key, value) pairs
 |  dict(iterable) -> new dictionary initialized as if via:
 |      d = {}
 |      for k, v in iterable:
 |          d[k] = v
 |  dict(**kwargs) -> new dictionary initialized with the name=value pairs
 |      in the keyword argument list.  For example:  dict(one=1, two=2)
 |  
 |  Methods defined here:
 |  
 |  __contains__(self, key, /)
 |      True if D has a key k, else False.
 |  
 |  __delitem__(self, key, /)
 |      Delete self[key].
 |  
 |  __eq__(self, value, /)
 |      Return self==value.

...

 |  update(...)
 |      D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
 |      If E is present and has a .keys() method, then does:  for k in E: D[k] = E[k]
 |      If E is present and lacks a .keys() method, then does:  for k, v in E: D[k] = v
 |      In either case, this is followed by: for k in F:  D[k] = F[k]
 |  
 |  values(...)
 |      D.values() -> an object providing a view on D's values
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  __hash__ = None
(END)
```

### keysでキーのみ出力する

```python
>>> d.keys()
dict_keys(['a', 'b'])
```

### valuesで値のみ出力する

```python
>>> d.values()
dict_values([10, 20])
```


### updateを使って辞書を他の辞書で拡張する

```python
>>> d
{'x': 10, 'y': 20}
>>> d2 = {'x': 1000, 'j':500}
>>> d2
{'x': 1000, 'j': 500}
>>> d.update(d2)
>>> d
{'x': 1000, 'y': 20, 'j': 500}
```

すでに存在しているキーの値は上書きされ、存在していないキーは値とともに辞書に追加される。