はじめに
今回は一見簡単そうに見えて実は奥が深い、
辞書を作成する方法について記す。
本記事では以下の順に沿って記していく。
・波括弧で作成する方法
・dict()で作成する方法
・辞書内包表記で作成する方法
波括弧で作成する方法
- {key: value, key: value, ...}で生成する方法。
d = {'k1': 1, 'k2': 2, 'k3': 3}
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}`
- 以下の2の方法はPython3.5からできるようになり、二つだけでなく三つ以上もできるらしい。また
d = {**d1, **d2, 'k5': 5}
として、結合と追加を掃除に行うこともできるらしい。
これを行なってもd1,d2はそのままらしい。
d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d = {**d1, **d2}
print(d) # {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
print(d1) # {'k1': 1, 'k2': 2}
print(d2) # {'k3': 3, 'k4': 4}
dict()で辞書を生成する方法
dict(key= value)とすることで辞書生成がされるらしい。
以下に例を示す。
d = dict(k1=1, k2=2, k3=3)
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
keyとvalueの組み合わせ(タプル(key, value)など)のリストから生成する方法。
d = dict([('k1', 1), ('k2', 2), ('k3', 4)])
print(d)
# {'k1': 1, 'k2': 2, 'k3': 4}
また以下のようにイテラブルであればリストのタプルや集合(set型)のリストなどの組み合わせでも問題ない。
・リストのタプル
d = dict((['k1', 1], ['k2', 2], ['k3', 4]))
print(d)
# {'k1': 1, 'k2': 2, 'k3': 4}
・集合(set型)のリスト
d = dict([{'k1', 1}, {'k2', 2}, {'k3', 4}])
print(d)
# {1: 'k1', 2: 'k2', 'k3': 4}
- zip関数から辞書を生成
keys = ['k1', 'k2', 'k3']
values = [1, 2, 3]
d = dict(zip(keys, values))
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
zip()関数を使うとキーのリストと値のリストから辞書を作成できる。リストに限らず、タプルなどでもOK。
辞書内包表記から作成する方法
- {key: value for 任意の変数名 in イテラブルオブジェクト}
l = ['Alice', 'Bob', 'Charlie']
d = {s: len(s) for s in l}
print(d)
# {'Alice': 5, 'Bob': 3, 'Charlie': 7}
リスト内包表記との違いは、[ ]でなく{}で囲むこと、および、キーと値の2つを指定すること。
- キーと値それぞれのリストから作成する場合はコンストラクタdict()と同様にzip()関数を使う。
keys = ['k1', 'k2', 'k3']
values = [1, 2, 3]
d = {k: v for k, v in zip(keys, values)}
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
まとめ
辞書を作成する方法がこんなにも沢山あるなんて、初めて知りました。なかなか面白い。
では、また次回。