データ構造-辞書の基本
記事の内容
この記事では、Pythonで最も利用されているデータ構造の1つである辞書について説明します。辞書はプログラミング言語によって、いろいろな名前で呼ばれています。Wikipediaによると、連想配列、連想リスト、連想コンテナ、辞書(あるいはカタカナでディクショナリ 英語: dictionary)、ハッシュ(英語: hash)、マップ(英語: map)などと呼ばれているようです。
***わからない用語があるときは索引ページへ***
1.辞書の書き方
辞書は、以下の規則で記述します。
<辞書変数> = {<キー1>: <値1>, <キー2>: <値2>, ・・・}
辞書型オブジェクトの定数は、データの項目である「キー(鍵、key)」と、そのデータ項目のデータである「値」のペアでデータを管理します。1つのペアを(辞書オブジェクトの)要素といいます。
1つの辞書で管理できる要素の数に制限はありません。単独のデータである数値データや文字列データと同じように、1つの変数に代入することができます。これを「辞書型のオブジェクト」、もしくは「辞書型のデータ」とよびます。
それでは具体的な記述の例を見てみましょう。listオブジェクトと同じように、要素と区切り文字","(カンマ)の間の半角スペース、タブ、改行は無視されますので、見やすいように書いてみます。
##会員カード
member_card1 = {
"名前": "山田花子",
"性別": "女性",
"メールアドレス": "yamada_hanako@example.com"
}
辞書オブジェクトの定数の書き方の規則について文字で説明すると、
・辞書に含めるデータを{}で囲む
・キーと値は":"(コロン)で区切る
・要素と要素は","(カンマ)で区切る
・要素と区切り文字","(カンマ)の間の半角
スペース、タブ、改行は無視される
・キーに使えるのは数値型、文字列型、タプル、
frozensetのオブジェクト
・値にはどんな型のオブジェクトでも使用できる
・要素数に制限はない
・ネストの深さに制限はない
・要素が1つもない空の辞書も表現でき、{}で表す
2.辞書の値へのアクセスと操作
辞書オブジェクトは、順番を管理していません(イテラブルではない)。キーと値のペアのマッピングのみを管理しています。値へのアクセスは、
<辞書オブジェクト>[<キー>]
の書式でアクセスします。
"dict_ex1.py"は、値の取得、書き換え、新しい要素の追加をするサンプルプログラムです。また、削除する場合はpopメソッドを使って、
<辞書オブジェクト>.pop(<キー>)
で削除します。
##dict_ex1.py
##会員カード
member_card1 = {
"名前": "山田鼻子",
"性別": "女性",
"メールアドレス": "yamada_hanako@example.com",
"いらない": 0
}
print("元の辞書:", member_card1, "\n")
##値の取得
print("会員の名前:", member_card1["名前"])
##値の書き換え
member_card1["名前"] = "山田花子"
print("修正した会員の名前:", member_card1["名前"], "\n")
##新しい要素の追加
member_card1["年齢"] = 50
print("年齢の項目を追加した辞書:", member_card1,"\n")
##要素を削除
member_card1.pop("いらない")
print("いらない要素を削除した辞書:", member_card1)
実行結果の出力
元の辞書: {'名前': '山田鼻子', '性別': '女性', 'メールアドレス': 'yamada_hanako@example.com', 'いらない': 0}
会員の名前: 山田鼻子
修正した会員の名前: 山田花子
年齢の項目を追加した辞書: {'名前': '山田花子', '性別': '女性', 'メールアドレス': 'yamada_hanako@example.com', 'いらない': 0, '年齢': 50}
いらない要素を削除した辞書: {'名前': '山田花子', '性別': '女性', 'メールアドレス': 'yamada_hanako@example.com', '年齢': 50}
次の記事(執筆中)では、辞書オブジェクトのメソッドと、その使い方について説明します。
3.辞書オブジェクトの代入は参照渡し
辞書オブジェクトは、オブジェクトの代入や関数の引数渡しが参照渡しとなっています。代入された変数を書き換えると元のオブジェクトも書き換えてしまうので、注意が必要です。値渡しと参照渡しについては、こちらの記事を参照ください。
値渡しをしたいときはcopy()メソッドを使います。copy()メソッドについては次の記事を参照ください。