Pythonの辞書(=dict)は、リストやタプルと同じように、複数の値を格納するコンテナ型データです。
ただし、リストやタプルのように要素をインデックス番号で保持するのではなく「キー」によって保持します。この特徴から、辞書は、リストとは違ったさまざまな場面で使われます。
ここで解説する辞書の作成方法を通じて理解を深めていきましょう。
1. 辞書(dict)の作り方
辞書は、キーと値のペアが一つの要素になっており、値をキーに紐づけて保持しています。
そのペアを、次のように波括弧 {} の中に、カンマ区切りで書いていきます。
dict = {キー1:値1, キー2:値2, キー3:値3}
実際に辞書を作ってみましょう。
metro = {"G":"銀座線", "M":"丸ノ内線", "H":"日比谷線", "T":"東西線"}
print(metro)
これで辞書ができました。辞書は値をキーに紐づけて保持しているので、次のようにスライスでキーを指定すると、対応する値を取り出すことができます。
metro["G"]
なお、値には、数値でも文字列でもリストでもタプルでも、あらゆる型のオブジェクトを入れることができます。
ただし、キーはイミュータブルなオブジェクト(文字列、数値、タプル)のみ可能で、イミュータブルなオブジェクト(リスト、辞書)は使えません。
これは辞書は、値をインデックスで管理している文字列やリストと違って、値をキーで管理しているからです。もし、キーがミュータブル(変更可能)であれば後で必ず大きなバグを引き起こす原因となります。
例えば、意図せず辞書のキーを変更してしまい、値を取り出せなくなってしまうというようなものです。そのためミュータブルなオブジェクトしかキーに設定できないようになっています。
同じ理由から、一つの辞書に同じキーが混在することはできません。
2. dict()関数|別のオブジェクトから辞書を作成
辞書はdict()関数で作ることもできます。3つ方法があります。
2.1. 引数に「キー=値」を渡す
まずは、以下のように、dict()関数の引数に「キー=値」と渡す方法です。
dict(キー=値, キー=値, キー=値)
以下が実際の書き方です。キーや値が文字列であっても「’」で囲む必要はありません。
items = dict(desk=3, chair=5, pc=4)
print(items)
2.2. 要素がキーと値のペアのイテラブルを渡す
次に、引数に、要素がキーと値のペアになっているイテラブルを渡す方法です。
イテラブルは「要素を順番に取り出すことができるオブジェクト(=for文にかけると要素を一つずつ取り出すことができる)」のことで、文字列、リスト、タプル、辞書、セットなどは全てイテラブルです。
内側の要素が値とキーのペアになっていれば、dict()関数に直接渡すだけで辞書化されます。
dict(要素がキーと値のペアであるイテラブル)
以下が実際のコードです。
この例では、リストの中にキーと値がペアになったタプルが一つずつ格納されています。これが逆になっていてもいいですし、二重リストや二重タプルでも構いません。
list = [('desk', 1), ('chair', 5), ('pc', 4)]
items = dict(list)
print(items)
2.3. 別々のイテラブルを渡す
二つの別々のイテラブルを、キーと値に入れ込んでいく方法もあります。これはzip()関数と組み合わせて次のように書きます。
dict(zip(イテラブル, イテラブル))
zip()関数は複数のイテラブルを同時に処理したい時によく使うものです。例えば「Pythonのfor文の基本と使い方」でも出てきます。
以下のコードをご覧ください。
keys = ['desk', 'chair', 'pc']
values = [1, 5, 4]
items = dict(zip(keys, values))
print(items)
keysとvaluesという二つのイテラブル(リスト)を、zip()関数にかけた上でdict()関数に渡しています。
この例では二つともリストですが、イテラブルであれば何でも構いません。
3. dict.fromkeys()関数|初期化した辞書を作成
dict.fromkeys()関数を使うと、初期化された辞書(値が全て同一の辞書)を作ることができます。
次のように書きます。第二引数の値は任意です。
dict.fromkeys([キー1, キー2, キー3], 値)
第二引数の値を指定しない場合は、キーのみで値がない辞書を作ることができます。
items = dict.fromkeys(['desk', 'chair', 'pc'])
print(items)
値を指定すると、全て同じ値の辞書になります。
items = dict.fromkeys(['desk', 'chair', 'pc'], 0)
print(items)
辞書の値は次のように後から指定することができます。
items['desk'] = 3
items['chair'] = 5
items['pc'] = 4
print(items)
この方法に関しては、「Pythonの辞書(dict)に要素を追加する方法」で解説しています。
4. まとめ
ここで解説した辞書(dict)の作成方法はどれもよく使うものですので、しっかりマスターしておきましょう。
コメント