Pythonの強力なデータ管理術:「辞書(dict)」をマスターしましょう
![]()
【Yuki】
ひろき君、こんにちは。今日はPythonの中でもとっても便利で、実用的なツールである「辞書(dict)」について、一緒にお勉強できればな……と思っています。
![]()
【Hiroki】
Yukiさん、こんにちは。辞書、ですか。以前教えてもらった「リスト」とはまた違うものなんですよね?
![]()
【Yuki】
はい、そうです。リストは「順番」を大切にするデータの集まりでしたが、辞書は「意味(名前)」と「値」をセットにして管理するのが得意なんです。
たとえるなら、本物の辞書のように「単語」を引くと「その意味」が出てくる……そんなイメージでしょうか。
プログラムを書いていると、ただの数字の羅列よりも「これは何のデータなのか」をはっきりさせたい場面が多いので、辞書は本当に欠かせない存在だと思います……。
![]()
【Hiroki】
なるほど。順番よりも、データ同士の結びつきが大事な時に使うんですね。
辞書の基本的な仕組み:キーと値のペア
![]()
【Yuki】
その通りです。辞書では、データの名前を「キー(Key)」、その中身を「値(Value)」と呼びます。この2つがペアになっているのが特徴です。
基本の書き方は、全体を波括弧 { } で囲んで、キーと値を コロン : で繋ぎます。複数のデータを入れる時は、リストと同じように カンマ , で区切ります。
# 辞書の基本的な書き方
user_profile = {
"name": "Yuki",
"age": 22,
"role": "Instructor"
}
![]()
【Hiroki】
"name" がキーで、"Yuki" が値ですね。見た目的にも、何の情報が入っているか分かりやすい気がします。
![]()
【Yuki】
そう言ってもらえると嬉しいです……。ちなみに、辞書のキーには文字列だけじゃなくて、数値なども使えます。でも、一般的には「何を表しているか分かりやすい文字列」を使うことが多いかもしれませんね。
辞書からデータを取り出す方法
![]()
【Hiroki】
辞書に入れたデータを取り出す時は、どうすればいいんですか? リストの時は [0] みたいにインデックス番号を使っていましたけど。
![]()
【Yuki】
辞書の場合は、番号ではなくキーの名前を指定します。 辞書名["キー名"] という形ですね。
# データの取り出し
print(user_profile["name"]) # 出力: Yuki
![]()
【Hiroki】
直感的ですね。でも、もし存在しないキーを指定しちゃったらどうなるんだろう……?
![]()
【Yuki】
あ、それは鋭い質問ですね。もし存在しないキーをそのまま指定すると、KeyError というエラーが出てプログラムが止まってしまいます。
それを防ぐために、.get() メソッドを使うのがおすすめです。これなら、キーがなくてもエラーにならずに None(空っぽ)を返してくれます。
# 安全な取り出し方
location = user_profile.get("location")
print(location) # 出力: None (エラーにならない)
![]()
【Yuki】
……実はわたし、Webサイトのプログラミング(Webデザイン)を考えるのが趣味なんですけど、サイトで使うフォントの指定なんかも辞書で管理するとすごく綺麗にまとまるんですよ。
例えば、タイトル用のフォントはこれ、本文用はこれ、といった感じで……。
そういう設定ファイルのようなものを作る時に、この辞書の構造はすごく相性がいいと思います。
![]()
【Hiroki】
Webデザインですか、おしゃれですね。確かに、font_settings["title_font"] みたいに管理できたら、コードを読み返す時も迷わなそうです。
データの追加・更新・削除
![]()
【Hiroki】
一度作った辞書に、後から新しいデータを追加したり、中身を書き換えたりすることもできますか?
![]()
【Yuki】
はい、とっても簡単ですよ。新しいキーを指定して値を代入するだけで追加できますし、既にあるキーを指定すれば上書き(更新)されます。
# データの追加
user_profile["favorite_color"] = "Light Blue"
# データの更新
user_profile["age"] = 23
# 辞書の中身を確認
print(user_profile)
![]()
【Hiroki】
追加も更新も、書き方は同じなんですね。削除したい時はどうするんですか?
![]()
【Yuki】
削除には、del 文か .pop() メソッドを使います。
del はその場で消すだけですが、.pop() は「消したデータを受け取る」ことができるので、ちょっと便利かもしれません。
# データの削除
del user_profile["role"]
# popを使った削除(削除した値を取得できる)
removed_value = user_profile.pop("age")
辞書の中身をループで処理する
![]()
【Hiroki】
リストの時は for ループで中身を順番に取り出せましたよね。辞書でも同じようなことはできるんでしょうか?
![]()
【Yuki】
もちろんです。ただ、辞書には「キー」と「値」の2つがあるので、取り出し方にはいくつかパターンがあります。
一番よく使われるのは、.items() というメソッドを使って、両方を同時に取り出す方法だと思います……。
# キーと値を同時に取り出す
for key, value in user_profile.items():
print(f"{key} は {value} です。")
![]()
【Hiroki】
なるほど。key と value という2つの変数に、ペアが順番に入ってくるんですね。
![]()
【Yuki】
はい。もしキーだけが必要ならそのままループさせるか .keys() を、値だけが必要なら .values() を使うこともできます。
用途に合わせて使い分けられるようになると、すごく効率的にコードが書けるようになるはずです……たぶん。
辞書の応用:辞書の中に辞書を入れる
![]()
【Hiroki】
もっと複雑なデータ、例えば「クラス全員のプロフィール」みたいなものを管理したい時はどうすればいいんでしょうか?
![]()
【Yuki】
その場合は、「辞書の中に辞書を入れる」という構造(入れ子構造)が便利です。
例えば、出席番号をキーにして、その値としてプロフィールの辞書を入れる……といった感じですね。
# 入れ子構造の辞書
students = {
"S001": {"name": "Hiroki", "score": 95},
"S002": {"name": "Yuki", "score": 88}
}
# データのアクセス
print(students["S001"]["name"]) # 出力: Hiroki
![]()
【Hiroki】
おお、これはすごい。データベースみたいですね!
![]()
【Yuki】
ふふ、そうですね。この構造はJSONというデータ形式にもそっくりで、今のIT業界では標準的に使われている形なんです。
これを使いこなせると、一気に本格的なプログラムに近づけると思います……。
辞書を使う時の注意点
![]()
【Hiroki】
辞書を使う時に、何か気をつけるべきことはありますか?
![]()
【Yuki】
そうですね……いくつかありますが、特に大切なのは「キーには重複を許さない」ということと、「キーには変更不可能なデータ(文字列や数値など)」しか使えない、という点でしょうか。
リストをキーにすることはできないので、そこだけ注意が必要かもしれません。
![]()
【Hiroki】
リストは中身を変えられるから、キーにすると混乱しちゃうから……でしょうか?
![]()
【Yuki】
はい、その通りだと思います。ひろき君は理解が早くて助かります……。
辞書は、データを「整理整頓」するための棚のようなものです。棚のラベル(キー)が勝手に変わってしまったら、どこに何を置いたか分からなくなってしまいますからね。
![]()
【Hiroki】
よく分かりました! 辞書、これからたくさん使ってみようと思います。
![]()
【Yuki】
ええ、ぜひ。最初は少し戸惑うかもしれませんが、慣れると手放せなくなるくらい便利なはずです。
もし分からないことがあったら、いつでも聞いてくださいね。……わたしも、ひろき君に教えながら、自分の知識を整理できている気がします。
参考資料
![]()
【Yuki】
もっと詳しく知りたい時は、こちらの公式サイトも見てみると勉強になるかもしれません……。
![]()
【Hiroki】
ありがとうございます! さっそく、学んだ辞書を使って自分専用のツールを作ってみます。
![]()
【Yuki】
応援しています。……あ、でもあまり夜遅くまで頑張りすぎないでくださいね。夜型なのは、わたしだけで十分ですから……。
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。


