Pythonでは、データを効率的に保存・管理するためにさまざまなデータ構造を利用することができます。
その中でも、辞書(dict型)は非常に強力で便利なデータ構造です。
初心者のうちは使いにくいと思われがちですが、最低限知っておくと良いことがあります。
この記事では、Pythonの辞書について初心者向けに詳しく解説します。
辞書(dict型)の基礎
辞書とは、「キー」と「値」のペアを格納するデータ構造です。
キーは一意であり、値はキーに関連付けられます。
辞書は波括弧 { }
を使って作成し、キーと値は「コロン :
」で区切ります。
複数のキーと値のペアは「カンマ ,
」で区切ります。
# 空の辞書の作成
my_dict = {}
# キーと値のペアの追加
my_dict = {"apple": 1, "banana": 2, "orange": 3}
# 値の取得
print(my_dict["apple"]) # 出力: 1
辞書の操作
辞書は非常に柔軟で、さまざまな操作が可能です。
以下に、パターン別の記述例を示します。
辞書の要素にアクセスする
キーに対する値を取り出すことができます。
my_dict = {"apple": 1, "banana": 2, "orange": 3}
# キーを指定して値にアクセス
print(my_dict["banana"])
2
このとき、存在しないキーを指定すると KeyError が発生します。
my_dict = {"apple": 1, "banana": 2, "orange": 3}
# 存在しないキーを指定すると KeyError が発生
print(my_dict["grape"])
Traceback (most recent call last):
File "C:\Users\User\デスクトップ\test.py", line 4, in <module>
print(my_dict["grape"])
KeyError: 'grape'
対処法として、getメソッドを使うと解決します。
my_dict = {"apple": 1, "banana": 2, "orange": 3}
# get() メソッドを使うとキーが存在しない場合のデフォルト値を指定できる
print(my_dict.get("grape", "未定義"))
その際、getメソッドの第二引数にはキーが存在しない場合の出力を指定することができます。
上の例では、「未定義」と表示させます。
未定義
値の追加または更新
既存のキーに対して値を代入することで、値を追加または更新することができます。
追加と更新は、処理としては同じ記述です。
my_dict = {"apple": 1, "banana": 2, "orange": 3}
# 新しいキーと値の追加
my_dict["grape"] = 4
# 既存のキーの値の更新
my_dict["apple"] = 5
print(my_dict)
{"apple": 5, "banana": 2, "orange": 3, "grape": 4}
値の削除
del
キーワードを使用して、辞書からキーとその値を削除することができます。
my_dict = {"apple": 1, "banana": 2, "orange": 3}
# キーと値の削除
del my_dict["apple"]
print(my_dict)
{"banana": 2, "orange": 3}
pop
メソッドを使用しても辞書からキーとその値を削除することができます。
my_dict = {"apple": 1, "banana": 2, "orange": 3}
# キーと値の削除
my_dict.pop("apple")
print(my_dict)
{"banana": 2, "orange": 3}
キーの存在チェック
in
キーワードを使用して、辞書内に指定したキーが存在するかどうかを確認することができます。
my_dict = {"apple": 1, "banana": 2, "orange": 3}
if "apple" in my_dict:
print("キーが存在します。")
else:
print("キーが存在しません。")
キーが存在します。
辞書の長さ(要素の数)の取得
len()
関数を使用して、辞書の要素数(キーの数)を取得することができます。
my_dict = {"apple": 1, "banana": 2, "orange": 3}
print(len(my_dict))
3
辞書におけるループ処理
辞書型のキーと値に対してループ処理を行うことができます。
my_dict = {"apple": 1, "banana": 2, "orange": 3}
# キーに対してループ処理
for key in my_dict:
print(key)
# 値に対してループ処理
for value in my_dict.values():
print(value)
# キーと値のペアに対してループ処理
for key, value in my_dict.items():
print(key, value)
apple
banana
orange
1
2
3
apple 1
banana 2
orange 3
辞書の注意点
辞書を使用する際に注意すべきポイントがあります。
キーの一意性
辞書のキーは一意でなければなりません。
一意というのは、「同じものがない」という意味です。
同じキーが複数回現れる場合、最後のキーと値が保持されます。
my_dict = {"apple": 1, "banana": 2, "apple": 3}
print(my_dict)
この場合、appleというキーに対して値を「1」としたが、2回目に値を「3」としたので最後のキー「3」が保持されます。
{'apple': 3, 'banana': 2}
キーの変更不可性
辞書のキーは変更不可(イミュータブル)のデータ型である必要があります。
例えば、文字列や数値などがキーとして利用できますが、ミュータブルであるリストや辞書はキーとして利用できません。
順番を保持しない
Pythonのバージョンによっては、出力または参照時に順番が変わることがあります。
(3.7以降であればその心配はありません。)
下の例では「apple」「banana」「orange」の順に定義していますが、実行すると順番は変わっています。
my_dict = { "apple": 360,"banana": 200, "orange": 150,}
for item in my_dict:
print(f'{item}は{my_dict[item]}円です')
orangeは150円です
appleは360円です
bananaは200円です
以上が、Pythonの辞書(dict型)の基本的な使い方に関する解説です。
辞書はデータを効率的に保存し、検索するための重要なデータ構造であることがご理解いただけたと思います。
プログラム例
以下に、Pythonの辞書を使用した実用的なプログラムの例を示します。
ぜひ、ご自身の環境にコピペして実行してみてください。
もし、エラーが出るなど問題がありましたらコメントかフォームにてご連絡ください。
この例を参考に、少しでも使い方のイメージができれば嬉しいです。
1.学生の成績管理プログラム
このプログラムは、複数の学生の成績データを管理し、学生の名前を入力するとその成績を表示するものです。
students = {
"Alice": 85,
"Bob": 92,
"Charlie": 78,
"David": 90,
"Eve": 88
}
while True:
print("--- 成績管理システム ---")
print("1. 学生の成績を表示する")
print("2. 成績を追加する")
print("3. 終了する")
choice = input("選択肢を入力してください: ")
if choice == "1":
name = input("成績を表示する学生の名前を入力してください: ")
if name in students:
score = students[name]
print(f"{name}さんの成績は {score} 点です。")
else:
print("指定された学生の成績はありません。")
elif choice == "2":
name = input("成績を追加する学生の名前を入力してください: ")
score = input("成績を入力してください: ")
students[name] = int(score)
print(f"{name}さんの成績が追加されました。")
elif choice == "3":
print("成績管理システムを終了します。")
break
else:
print("無効な選択肢です。")
このプログラムでは、students
という辞書を使って学生の成績データを管理しています。
メインの無限ループ内で、ユーザーに選択肢を表示し、それに応じた操作を行います。
choice == "1"
の場合: 学生の名前を入力し、辞書からその学生の成績を取得して表示します。choice == "2"
の場合: 学生の名前と成績を入力し、辞書に新しいキーと値のペアとして追加します。choice == "3"
の場合: プログラムを終了します。
このプログラムを実行すると、学生の成績を管理できるシンプルなシステムが実現されます。
学生の成績を表示したり、新しい成績を追加したりできます。
辞書を活用したデータ管理の基本的なアプリケーションとなります。
2.アドレス帳プログラム
このプログラムは、ユーザーの連絡先情報を辞書として保存し、連絡先の追加、検索、更新、削除といった操作を行うことができます。
少し長いですが、一つずつ読み込むと理解できると思います。
なお、本プログラムでは関数が定義されています。
Pythonの初心者の方で、この例題が分からない場合は見なかったことにしてください。
def show_menu():
print("--- アドレス帳 ---")
print("1. 連絡先を追加する")
print("2. 連絡先を検索する")
print("3. 連絡先を更新する")
print("4. 連絡先を削除する")
print("5. 終了する")
def add_contact(address_book):
name = input("名前を入力してください: ")
phone = input("電話番号を入力してください: ")
email = input("メールアドレスを入力してください: ")
contact = {
"名前": name,
"電話番号": phone,
"メールアドレス": email
}
address_book[name] = contact
print("連絡先が追加されました。")
def search_contact(address_book):
name = input("検索する名前を入力してください: ")
if name in address_book:
contact = address_book[name]
print("--- 連絡先情報 ---")
print("名前:", contact["名前"])
print("電話番号:", contact["電話番号"])
print("メールアドレス:", contact["メールアドレス"])
else:
print("連絡先が見つかりませんでした。")
def update_contact(address_book):
name = input("更新する連絡先の名前を入力してください: ")
if name in address_book:
print("--- 連絡先情報 ---")
print("1. 電話番号を更新する")
print("2. メールアドレスを更新する")
option = int(input("更新する項目を選択してください: "))
if option == 1:
new_phone = input("新しい電話番号を入力してください: ")
address_book[name]["電話番号"] = new_phone
print("電話番号が更新されました。")
elif option == 2:
new_email = input("新しいメールアドレスを入力してください: ")
address_book[name]["メールアドレス"] = new_email
print("メールアドレスが更新されました。")
else:
print("無効なオプションです。")
else:
print("連絡先が見つかりませんでした。")
def delete_contact(address_book):
name = input("削除する連絡先の名前を入力してください: ")
if name in address_book:
del address_book[name]
print("連絡先が削除されました。")
else:
print("連絡先が見つかりませんでした。")
def main():
address_book = {}
while True:
show_menu()
choice = input("選択肢を入力してください: ")
if choice == "1":
add_contact(address_book)
elif choice == "2":
search_contact(address_book)
elif choice == "3":
update_contact(address_book)
elif choice == "4":
delete_contact(address_book)
elif choice == "5":
print("アドレス帳を終了します。")
break
else:
print("無効な選択肢です。")
if __name__ == "__main__":
main()
このプログラムでは、address_book
という空の辞書を作成し、それを使って連絡先情報を管理します。
メイン関数 main()
では、無限ループを使ってユーザーに選択肢を表示し、それに応じた操作を行います。
各操作は対応する関数によって処理されます。
各関数の説明は以下の通りです。
add_contact()
: 新しい連絡先を追加します。名前、電話番号、メールアドレスを入力し、辞書の新しいキーと値のペアとして追加します。search_contact()
: 指定された名前の連絡先を検索し、情報を表示します。update_contact()
: 指定された名前の連絡先の情報を更新します。電話番号またはメールアドレスのどちらを更新するかを選択できます。delete_contact()
: 指定された名前の連絡先を削除します。show_menu()
: メニューを表示します。
プログラムの最後では、main()
関数を呼び出してプログラムを実行します。
実行すると、シンプルなアドレス帳の操作が可能になります。
連絡先を追加したり、検索したり、更新したり、削除したりすることができます。
辞書を使ったこのようなアプリケーションは、実際のソフトウェア開発で頻繁に使用されます。
3.翻訳プログラム
このプログラムは、英日の辞書データを作成し、ユーザーが英単語を入力するとそれに対応する日本語の意味を表示する翻訳プログラムです。
def create_dictionary():
dictionary = {}
while True:
print("--- 辞書データの作成 ---")
word = input("英単語を入力してください(終了する場合はEnterキー): ")
if not word:
break
meaning = input("日本語の意味を入力してください: ")
dictionary[word] = meaning
return dictionary
def search_meaning(dictionary):
word = input("翻訳する英単語を入力してください: ")
if word in dictionary:
meaning = dictionary[word]
print("日本語の意味:", meaning)
else:
print("指定された英単語の意味は見つかりませんでした。")
def main():
dictionary = create_dictionary()
while True:
print("--- 翻訳プログラム ---")
print("1. 英単語を翻訳する")
print("2. 辞書データを追加する")
print("3. 終了する")
choice = input("選択肢を入力してください: ")
if choice == "1":
search_meaning(dictionary)
elif choice == "2":
dictionary = create_dictionary()
elif choice == "3":
print("翻訳プログラムを終了します。")
break
else:
print("無効な選択肢です。")
if __name__ == "__main__":
main()
このプログラムでは、create_dictionary()
関数を使って辞書データを作成します。
ユーザーに英単語とその日本語の意味を入力させ、それを辞書として保存します。
翻訳を行う際には、search_meaning()
関数を使って指定された英単語の意味を検索し、表示します。
メイン関数 main()
では、無限ループを使ってユーザーに選択肢を表示し、それに応じた操作を行います。
search_meaning()
: 指定された英単語の意味を検索し、表示します。create_dictionary()
: 辞書データを作成します。英単語と日本語の意味を入力し、辞書に追加します。main()
: メニューを表示し、選択された操作を実行します。
このプログラムを実行すると、英単語とその日本語の意味を入力して辞書データを作成し、その後は翻訳プログラムを利用できます。
英単語を入力すると、辞書データ内での対応する日本語の意味を表示します。
プログラムの最後では、`main()` 関数を呼び出してプログラムを実行します。
このプログラムを実行すると、簡単な翻訳プログラムが起動します。
辞書データを作成し、英単語を検索することができます。
辞書を拡張したい場合は、新しい辞書データを作成することも可能です。
このような辞書を使った翻訳プログラムは、言語学習やテキスト解析などの多くの場面で有用です。
辞書を使ってデータを管理し、必要な情報を瞬時に検索することができるため、効率的で便利です。
まとめ
いかがだったでしょうか。
リストやタプルと比べると、辞書は少しわかりにくいかもしれません。
しかし、キーと値をセットで管理することができるので、とても重宝するデータ構造です。
他にも、同じデータ構造としてリストについて合わせて理解を深めると良いです。
こちらの記事もご覧ください。
それでは、ステキなPythonライフを!
Pythonについて詳しく知りたいという方は、こちらの書籍もおススメです。