Pythonで辞書型を作成・変更・表示・出力する

辞書キー(key)値(value)のペアの集合です。
コードではコロンで結び付け、key: valueとなります。

この記事は、辞書型(dictionary)の説明をします。

大きなデータの場合はDataFrameが便利ですが、ちょっとしたデータは辞書型が適しています。

辞書の仕様書です。

辞書型の作成

辞書の作り方はいろいろありますが、キーと値を波括弧{}で囲むのが直感的です。

d = {'aaa': 1, 'bbb': 2, 'ccc': 3}

print(d)
print(type(d))
# {'aaa': 1, 'bbb': 2, 'ccc': 3}
# <class 'dict'>
# シンプルな辞書の作り方。

d = dict([('aaa', 1), ('bbb', 2), ('ccc', 3)])

print(d)
# {'aaa': 1, 'bbb': 2, 'ccc': 3}
# dict()にタプルのリストを渡して作る。

d = dict(aaa=1, bbb=2, ccc=3)

print(d)
# {'aaa': 1, 'bbb': 2, 'ccc': 3}

d = {}

print(d)
# {}
# 空の辞書を作れる。

キーは文字列である必要はありません。
数字を使ってキーを通し番号のように使えます。

d = {1: 'aaa', 2: 'bbb', 3: 'ccc'}

print(d)
# {1: 'aaa', 2: 'bbb', 3: 'ccc'}
# キーは文字でなくてもいい。

辞書の変更

値の更新

値を更新する方法です。

d = {'aaa': 1, 'bbb': 2, 'ccc': 3}

print(d)
# {'aaa': 1, 'bbb': 2, 'ccc': 3}

d['aaa'] = 4

print(d)
# {'aaa': 4, 'bbb': 2, 'ccc': 3}

d.update({'bbb': 5})

print(d)
# {'aaa': 4, 'bbb': 5, 'ccc': 3}

d.update(ccc=6)

print(d)
# {'aaa': 4, 'bbb': 5, 'ccc': 6}

キーの追加

新たなキーを追加する方法です。

d = {'aaa': 1, 'bbb': 2, 'ccc': 3}

print(d)
# {'aaa': 1, 'bbb': 2, 'ccc': 3}

d['ddd'] = 4

print(d)
# {'aaa': 1, 'bbb': 2, 'ccc': 3, 'ddd': 4}

d.update({'eee': 5})

print(d)
# {'aaa': 1, 'bbb': 2, 'ccc': 3, 'ddd': 4, 'eee': 5}

d.update(fff=6)

print(d)
# {'aaa': 1, 'bbb': 2, 'ccc': 3, 'ddd': 4, 'eee': 5, 'fff': 6}

d.update({'ggg': None})

print(d)
# {'aaa': 1, 'bbb': 2, 'ccc': 3, 'ddd': 4, 'eee': 5, 'fff': 6, 'ggg': None}
# 値をNoneにすることもできる。

キーの削除

辞書のキーを削除する方法です。ペアとなる値も削除されます。

d = {'aaa': 1, 'bbb': 2, 'ccc': 3}

print(d)
# {'aaa': 1, 'bbb': 2, 'ccc': 3}

del d['ccc']

print(d)
# {'aaa': 1, 'bbb': 2}

辞書の表示

json.dumpsを使えば、辞書が見やすくなります。

import json

d = {'aaa': 1, 'bbb': 2, 'ccc': 3}

print(d)
# {'aaa': 1, 'bbb': 2, 'ccc': 3}

print(json.dumps(d, indent=4))
# {
#     "aaa": 1,
#     "bbb": 2,
#     "ccc": 3
# }

json.dumpsで日本語を表示したい場合は、ensure_ascii=Falseを付けましょう。

d = {'あああ': 1, 'いいい': 2}

print(d)
# {'あああ': 1, 'いいい': 2}

print(json.dumps(d, indent=4))
# {
#     "\u3042\u3042\u3042": 1,
#     "\u3044\u3044\u3044": 2
# }
# json.dumpsだと日本語は表示されない。

print(json.dumps(d, indent=4, ensure_ascii=False))
# {
#     "あああ": 1,
#     "いいい": 2
# }
# json.dumpsで日本語を表示するには、ensure_ascii=Falseにする。

キー、値の表示

辞書全体でなく、キーや値を表示できます。

print(d.keys())
print(list(d.keys()))
# dict_keys(['aaa', 'bbb', 'ccc'])
# ['aaa', 'bbb', 'ccc']

print(d.values())
print(list(d.values()))
# dict_values([1, 2, 3])
# [1, 2, 3]


print(d.items())
# dict_items([('aaa', 1), ('bbb', 2), ('ccc', 3)])

for k, v in d.items():
    print(f'key:{k} value:{v}')

# key:aaa value:1
# key:bbb value:2
# key:ccc value:3

辞書の出力

辞書を見やすい形でファイル出力したいときは、json.dumpを使いましょう。
ファイル出力の場合は、dumpsではなくdumpです。
日本語がある場合は、ensure_ascii=Falseを付けましょう。

d = {'aaa': 1, 'bbb': 2, 'ccc': 3}

file_path = os.path.join(os.getcwd(), 'dict.txt')
f = open(file_path, mode='w')
json.dump(d, f, indent=4)
f.close()


d = {'あああ': 1, 'いいい': 2, 'ううう': 3}

file_path = os.path.join(os.getcwd(), 'dict_jp.txt')
f = open(file_path, mode='w')
json.dump(d, f, indent=4, ensure_ascii=False)
f.close()