---
# System prepended metadata

title: 辞書(Dictionary)
tags: [Python]

---

# 辞書(Dictionary)

###### tags: `Python`

辞書（dictionary）型とは、「{}」の中にkeyとvalueの組み合わせが含まれているデータのことです。
:::info
dic = {key1 : value1, key2 : value2, key3 : value3}
:::
のように、辞書型のオブジェクトを構成する要素はkeyとvalueをコロン(:)で区切ったペアになっています。

そして、それぞれのペアはカンマ(,)で区切られています。

**Example:**

| NAME| AGE | EMAIL |
| -------- | -------- | -------- |
| Eric     | 21    | 'abc123@gmail.com'|
```python=
dic = {'NAME' : 'Eric', 'AGE' : 21, 'EMAIL' : 'abc123@gmail.com'}
print(dic)
```
**Results:**
```
{'NAME': 'Eric', 'AGE': 21, 'EMAIL': 'abc123@gmail.com'}
```
---
## 空の辞書を作成する
```python=
dict_a = {}
dict_b = dict()
```
* 運用効率については、{}はDict（）よりも速くなります。

---
## String型のキーと数値型のキー 
### String型のキー 
```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
```
### 数値型のキー 
```python=
dict_key_val = {10: 'グーグル', 100: 'ツイッター', 55: 'アマゾン'}

imas = {765: 'ミリシタ', 
        346: 'デレステ', 
        283: 'シャイニーカ'}
```
---
## 要素を取り出す
* ### dict(key)
dict[key]既存の辞書の key に対応するvalueを取り出す。
```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
print(dict['Google'])
```
**Results:**
```
グーグル
```
* ### get(key, default = None)
keyが辞書にあれば key に対する値を、そうでなければ default を返します。default のデフォルトは None です。

```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
print(dict.get('Google', 'xxx'))
print(dict.get('Facebook', 'xxx'))
```
**Results:**
```
グーグル
xxx
```
* ### setdefault(key, default = None)
もし、key が辞書に存在すれば、その値を返します。そうでなければ、値を default として key を挿入し、 default を返します。 default のデフォルトは None です。

```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
dict.setdefault('Facebook', 'フェースブック')
print(dict)
```
**Results:**
```
{'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン', 'Facebook': 'フェースブック'}
```
* ### keys()
既存の辞書の key のリストを取り出す。
```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
print('keys() = ' , dict.keys())
```
**Results:**
```
keys() =  dict_keys(['Google', 'Twitter', 'Amazon'])
```
* ### values()
既存の辞書の value のリストを取り出す。
```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
print('values() = ' , dict.values())
```
**Results:**
```
values() =  dict_values(['グーグル', 'ツイッター', 'アマゾン'])
```
* ### items() 
items()既存の辞書のオブジェクト(keyとvalue)を返します
```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
print('items() = ' , dict.items())
```
**Results:**
```
items() =  dict_items([('Google', 'グーグル'), ('Twitter', 'ツイッター'), ('Amazon', 'アマゾン')])
```
## 辞書の項目数
### * len()

辞書の項目数を返します
```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
print('dict n = ', len(dict));
```
**Results:**
```
dict n =  3
```
## 値を追加しますと値を変更します
* ### d(key) = value
d(key) に value を設定します。
```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
dict['Microsoft'] = 'マイクロソフト'　# 追加
dict['Google'] = 'Googol'　# 変更
print(dict)
```
**Results:**
```
{'Google': 'Googol', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン', 'Microsoft': 'マイクロソフト'}
```
* ### update({key : value})
辞書の内容をkeyとvalueで変更します。
```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
dict.update({'Microsoft':'マイクロソフト'}) #追加
dict.update({'Google':'Google'}) #変更
print(dict)
```
**Results:**
```
{'Google': 'Google', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン', 'Microsoft': 'マイクロソフト'}
```

## 辞書のコピー
* ### copy()
```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
dict_cp = dict.copy()
print('dict = ' , dict)
print('dict_cp = ' , dict_cp)
```
**Results:**
```
dict =  {'Google': 'グーグル', 'Twitter': 'ツイッター'}
dict_cp =  {'Google': 'グーグル', 'Twitter': 'ツイッター'}
```
## 要素を削除する
* ### pop()
pop(i) 辞書中の指定された位置(i)にある要素をリストから削除して、その要素を返します。

```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
print('pop() = ', dict.pop('Twitter'))
print(dict)
```
**Results:**
```
pop() =  ツイッター
{'Google': 'グーグル', 'Amazon': 'アマゾン'}
```
* ### popitem()
popitem()メソッドは辞書の要素を削除し、そのキーkeyと値valueのタプル(key, value)を返す。どの要素を削除するかは指定できない(random)。

```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
print(dict)
print('pop() = ', dict.popitem())
print(dict)
print('pop() = ', dict.popitem())
print(dict)
print('pop() = ', dict.popitem())
print(dict)
```
**Results:**
```
{'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
pop() =  ('Amazon', 'アマゾン')
{'Google': 'グーグル', 'Twitter': 'ツイッター'}
pop() =  ('Twitter', 'ツイッター')
{'Google': 'グーグル'}
pop() =  ('Google', 'グーグル')
{}
```
要素が空の状態で popitem メソッドを使用すると KeyError エラーが発生します。
```python=
dict = {}
print('pop() = ', dict.popitem())
```
**Results:**
```
KeyError: 'popitem(): dictionary is empty'
```

* ### del d(key)
d から d(key) を削除します。マップに key が存在しなければ、 KeyError を送出します。
```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
del dict['Amazon']
print('del = ' , dict)
```
**Results:**
```
del =  {'Google': 'グーグル', 'Twitter': 'ツイッター'}
```
* ### clear()
辞書の全ての項目を消去します。
```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
dict.clear()
print('clear = ' , dict)
```
**Results:**
```
clear =  {}
```
* ### del d
辞書を削除します。
```python=
del dict
```
## 存在確認
* ### in 
in演算子を利用し、辞書に特定のキーを持つペアが存在するか確認できます。
  getも出来ます。

```python=
dict = {'Google': 'グーグル', 'Twitter': 'ツイッター', 'Amazon': 'アマゾン'}
print( str('Google' in dict.keys()))
print( str('Google' in dict.values()))
```
**Results:**
```
True
False
```
## ソート
* ### sorted
辞書型には順序がありませんが、ソートで順序を並べることは出来ます。
```python=
dict = {'Google': 100, 'Twitter': 50, 'Amazon': 70}
sortedDict = sorted(dict.values())
print(sortedDict)

dict = {3: 'グーグル', 1: 'ツイッター', 2: 'アマゾン'}
sortedDict = sorted(dict.items())
print(sortedDict)
```
**Results:**
```
[50, 70, 100]
[(1, 'ツイッター'), (2, 'アマゾン'), (3, 'グーグル')]
```

* ### sorted 依照值來排序
```python=
dict = {'Google': 100, 'Twitter': 50, 'Amazon': 70}
sortedDict = sorted(dict.items(), key=lambda item:item[1])
print(sortedDict)
```
**Results:**
```
[('Twitter', 50), ('Amazon', 70), ('Google', 100)]
```

:::warning
## 利用dict()將雙值序列轉成字典
* 內容剛好每一組都是兩項(裡外兩層不管是tuple或list都沒有問題)
```python=
# list(tuple) -> dict
imas_list = [(765, 'ミリシタ'), (346, 'デレステ'), (283, 'シャイニーカ')]
imas_dict = dict(imas_list)    
print(imas_dict)

# tuple(list) -> dict
imas_tuple = ([765, 'ミリシタ'], [346, 'デレステ'], [283, 'シャイニーカ'])
imas_dict = dict(imas_list)    
print(imas_dict)
```
**Results:**
```
{765: 'ミリシタ', 346: 'デレステ', 283: 'シャイニーカ'}
{765: 'ミリシタ', 346: 'デレステ', 283: 'シャイニーカ'}
```
* 兩個字元的字串會分別被拆開(但超過兩個字元就不支援了)
```python=
str_list = ["ax", "cy", "ez"]
str_dict = dict(str_list)
print(str_dict)
```
**Results:**
```
{'a': 'x', 'c': 'y', 'e': 'z'}
```

## 利用zip()建立字典
```python=
asciidict = dict(zip(range(97, 101), "abcd"))
print(asciidict)

id_list = [765, 346 ,283 ]
name_list = ['ミリシタ', 'デレステ', 'シャイニーカ']
imas_dict = dict(zip(id_list, name_list))
print(imas_dict)
```
**Results:**
```
{97: 'a', 98: 'b', 99: 'c', 100: 'd'}
{765: 'ミリシタ', 346: 'デレステ', 283: 'シャイニーカ'}
```

:::














