Python辞書(dict)の基本操作と初心者が陥りやすい5つの落とし穴
Pythonの辞書(dict)は、キーと値をペアとして対応付けるデータ構造です。要素へのアクセスが高速で柔軟なデータ管理が可能なため、Pythonプログラミングで最も頻繁に使われるデータ構造の一つです。辞書は波括弧 { } で囲んで定義します。
my_dict = {'day1': 'Mon', 'day2': 'Tue', 'day3': 'Wed'}各要素は「キー: 値」の形式で記述し、複数の要素はカンマで区切ります。
辞書の作成
辞書を作成するには、波括弧の中にキーと値のペアを記述して変数に代入します。dict()コンストラクタを使う方法もあります。
例
# 波括弧を使った作成
dict1 = {'day1': 'Mon', 'day2': 'Tue', 'day3': 'Wed'}
print(type(dict1))
print(dict1)
# dict() コンストラクタを使った作成
dict2 = dict(day1='Mon', day2='Tue', day3='Wed')
print(type(dict2))
print(dict2)実行結果
<class 'dict'>
{'day1': 'Mon', 'day2': 'Tue', 'day3': 'Wed'}
<class 'dict'>
{'day1': 'Mon', 'day2': 'Tue', 'day3': 'Wed'}辞書の値へのアクセス
辞書の要素にアクセスするには、角括弧 [ ] にキーを指定する方法と、get()メソッドを使う方法があります。ネストした辞書(辞書の中に辞書がある構造)にも同じ要領でアクセスできます。
例
my_dict = {
'day1': 'Mon',
'day2': 'Tue',
'day3': 'Wed',
'weekend': {'d1': 'Saturday', 'd2': 'Sunday'}
}
print(my_dict['day2'])
print(my_dict['weekend'])
print(my_dict.get('day3'))実行結果
Tue
{'d1': 'Saturday', 'd2': 'Sunday'}
Wed要素の追加
新しいキーと値のペアを代入するだけで、辞書に新しい要素を追加できます。辞書を値として持たせれば、ネストした辞書も作成できます。
例
my_dict = {'day1': 'Mon', 'day2': 'Tue', 'day3': 'Wed'}
my_dict['day4'] = 'Thu'
my_dict['day5'] = 'Fri'
print(my_dict)実行結果
{'day1': 'Mon', 'day2': 'Tue', 'day3': 'Wed', 'day4': 'Thu', 'day5': 'Fri'}辞書の更新
既存のキーに対して新しい値を代入すると、その要素の値が更新されます。新規キーへの代入は「追加」、既存キーへの代入は「更新」として動作します。
例
my_dict = {'day1': 'Mon', 'day2': 'Tue', 'day3': 'Wed'}
my_dict['day1'] = 'Monday'
my_dict['day2'] = 'Tuesday'
print(my_dict)実行結果
{'day1': 'Monday', 'day2': 'Tuesday', 'day3': 'Wed'}要素の削除
特定の要素を削除するには del 文を使います。del 文に辞書名だけを渡すと辞書自体が削除され、clear()メソッドを使うとすべての要素が削除されて空の辞書になります。
例
my_dict = {'day1': 'Mon', 'day2': 'Tue', 'day3': 'Wed'}
del my_dict['day3']
print(my_dict)
my_dict.clear()
print(my_dict)実行結果
{'day1': 'Mon', 'day2': 'Tue'}
{}辞書を使う際によくある5つの間違い
1. 角括弧での直接アクセスによる KeyError
存在しないキーに対して my_dict[キー] の形式でアクセスすると、KeyError 例外が発生してプログラムが停止します。get()メソッドを使えば、キーが存在しない場合でも None(または任意のデフォルト値)が返されるため、安全にアクセスできます。
print(my_dict.get('day6')) # None を返す
print(my_dict.get('day6', 'N/A')) # デフォルト値 'N/A' を返す2. update()メソッドを使わない更新
複数の要素を一度に更新したい場合、個別に代入するよりも update()メソッドを使う方がコードが簡潔になり、意図も明確になります。
my_dict.update({'day1': 'Monday', 'day2': 'Tuesday'})3. 代入によるコピーで参照を共有してしまう
dict2 = dict1 のように代入すると、新しい辞書が作成されるのではなく、同じオブジェクトへの参照が共有されます。片方を変更するともう片方も連動して変わってしまうため、独立したコピーが必要な場合は copy()メソッドで浅いコピーを作成しましょう。
dict_copy = dict1.copy()
4. 順序を考慮しないループ処理
辞書の要素を特定の順序で処理したい場合は、sorted()関数でキーをソートしてからループするとよいでしょう。
for key in sorted(my_dict):
print(key, my_dict[key])5. データ構造の選択を誤る
辞書は非常に便利ですが、すべての場面で最適というわけではありません。重複のない値の集まりには set、変更不可のシーケンスには tuple など、要件に応じて適切なデータ構造を選ぶことが重要です。
また、変数名に組み込み型の dict を使用すると、以降 dict()コンストラクタが呼び出せなくなってしまうため避けましょう。本記事のサンプルでは my_dict のような変数名を使用しています。
-
PythonとTkinterで作るGUI単語辞書アプリの作成方法
この記事では、PyDictionaryモジュールとTkinterを組み合わせて、GUIベースの辞書アプリケーションを作成する方法を解説します。PyDictionaryは、単語の意味・翻訳・類義語・反義語を取得できる便利なPythonモジュールです。意味の取得にはWordNet、翻訳にはGoogle、類義語・反義語の取得にはsynonym.comを利用しています。また、依存ライブラリとしてBeautifulSoupとRequestsモジュールが必要になります。必要なモジュールのインストールまず、以下のコマンドでPyDictionaryを環境にインストールしましょう。pip install PyD
-
PythonでのCX_Freezeの使い方:スクリプトを実行ファイル(EXE)に変換する方法
はじめに 何か面白いものを作りたいという欲求は人間の本能であり、完成したものは誰かに共有したくなるものです。Pythonでもその願いを叶えられます。ただし、作成したPythonスクリプトをそのまま共有するには、相手のマシンにも同じバージョンのPythonと、プログラムで使用しているすべてのモジュールがインストールされている必要があります。 そこで役立つのがCX_Freezeです。このツールを使えば、Pythonがインストールされていない環境でも動作するスタンドアロンの実行ファイル(.exe)を作成できます。 CX_Freezeのインストール まず、コマンドプロンプトで以下のコマンドを実行し、c