型 辞書

辞書とはdict型のことです。他のプログラミング言語では連想配列とかハッシュ(マップ)とか呼ばれているものと同じです。でもまぁごちゃごちゃ考えるよりは、JSONを思い浮かべると良いかと思います。

ここで学習すること

  • 型としての辞書
  • 辞書への変換

説明

型としての辞書

端的に表現してJSONです。キーと値が対になっていて、キーを使って値にアクセス可能なデータです。キーには数値も使えるのでリストと見た目同じになってしまったりもします。

{
    "name": "john",
    "age": 30
}

dict01.py

#!/usr/bin/env python3.8

int_dict = {1: "first", 2: "second", 3: "third",}
str_dict = {"1": "first","2": "second","3": "third",}

print(int_dict)
print(int_dict[1])

print(str_dict)
print(str_dict["1"])


dict1 = {
    "name": "john",
    "age": 30
}
print(dict1)

実行

$ python dict01.py 
{1: 'first', 2: 'second', 3: 'third'}
first
{'1': 'first', '2': 'second', '3': 'third'}
first
{'name': 'john', 'age': 30}
$

次に値の変更、追加、dictの連結です。変更はそのまま値を代入すればOKです。追加は存在しないキーを指定して値を代入するとそれで追加になります。

dict同士の連結はupdate()をつかいます。結合したい方のupdate()をつかいます。メソッドの名前の通り、存在しないキーの場合は純粋に結合され、存在するキーの場合は引数に指定したdictでアップデートされます。

dict02.py

#!/usr/bin/env python3.8

str_dict = {"1": "first","2": "second","3": "third",}

print(str_dict)
str_dict["1"] = "いち"
print(str_dict)

str_dict["4"] = "よん"
print(str_dict)

str_dict2 = {"5": "ご",}
str_dict.update(str_dict2)
print(str_dict)

str_dict3 = {"2": "に",}
str_dict.update(str_dict3)
print(str_dict)

実行

$ python dict02.py 
{'1': 'first', '2': 'second', '3': 'third'}
{'1': 'いち', '2': 'second', '3': 'third'}
{'1': 'いち', '2': 'second', '3': 'third', '4': 'よん'}
{'1': 'いち', '2': 'second', '3': 'third', '4': 'よん', '5': 'ご'}
{'1': 'いち', '2': 'に', '3': 'third', '4': 'よん', '5': 'ご'}
$

辞書への変換

散々JSONだと言いってしまいましたが、JSONはテキストのデータであってあくまでdictではありません。ということはJSONをdictにするということをプログラムの中は求められます。

dict03.py

#!/usr/bin/env python3.8

import json

json_str = '{"name": "john", "age": 25}'

json_dict = json.loads(json_str)

print(json_str)
print(json_dict)

実行

$ python dict03.py 
{"name": "john", "age": 25}
{'name': 'john', 'age': 25}
$ 

print()で出力するとほとんどギャグにしかなっていませんが、上が文字列で下がdictです。

なお、逆の操作はjson.dumps(dict)になります。

このほかにリストやタプルのリストからdictに変換することも可能です。そうdict()を使います。

dict04.py

#!/usr/bin/env python3.8

list1 = [["name", "Ken"], ["age", 10]]
print(dict(list1))

list2 = [("name", "Ken"), ("age", 10)]
print(dict(list2))

実行

$ python dict04.py 
{'name': 'Ken', 'age': 10}
{'name': 'Ken', 'age': 10}
$