Python辞書完全ガイド:作成、操作、高度なテクニック
Python辞書
この包括的ガイドでは、Python辞書の作成、アクセス、要素追加・削除、組み込みメソッドの活用方法を解説します。
動画:Python辞書でキー/値ペアを格納
Python辞書はキー/値ペアの順序なしコレクションです。各エントリは一意でイミュータブルなキーを、任意の型の値に関連付けます。
Python辞書の作成
辞書定義は簡単:カンマ区切りのキー/値ペアを中括弧{}内に配置します。キーはイミュータブル(文字列、数値、イミュータブル要素のみのタプル)かつ一意でなければなりません;値は任意のデータ型でよく、重複可能です。
# 空の辞書
my_dict = {}
# 整数キーの辞書
my_dict = {1: 'apple', 2: 'ball'}
# 混合キーの辞書
my_dict = {'name': 'John', 1: [2, 4, 3]}
# dict()使用
my_dict = dict({1:'apple', 2:'ball'})
# ペアのシーケンスから
my_dict = dict([(1,'apple'), (2,'ball')])
上記すべてのアプローチで同じ辞書構造が作成されます。
辞書からの要素アクセス
辞書値はキーで取得します。角括弧[]またはget()メソッドを使用。括弧はキー不在時にKeyErrorを発生;get()はデフォルトでNoneを返します。
# get vs [] での要素取得
my_dict = {'name': 'Jack', 'age': 26}
# 出力: Jack
print(my_dict['name'])
# 出力: 26
print(my_dict.get('age'))
# 存在しないキーへのアクセスはNoneを返す
print(my_dict.get('address'))
# KeyError
print(my_dict['address'])
出力
Jack 26 None Traceback (most recent call last): File "<string>", line 15, in <module> print(my_dict['address']) KeyError: 'address'
辞書要素の変更と追加
辞書はミュータブルです。既存キーへの代入は値を更新;新しいキーへの代入は新規エントリを追加します。
# 辞書要素の変更と追加
my_dict = {'name': 'Jack', 'age': 26}
# 値更新
my_dict['age'] = 27
# 出力: {'age': 27, 'name': 'Jack'}
print(my_dict)
# アイテム追加
my_dict['address'] = 'Downtown'
# 出力: {'address': 'Downtown', 'age': 27, 'name': 'Jack'}
print(my_dict)
出力
{'name': 'Jack', 'age': 27} {'name': 'Jack', 'age': 27, 'address': 'Downtown'}
辞書からの要素削除
pop()で特定キーを削除し値を取得。popitem()で任意のペアを削除、clear()で全削除。delキーワードで個別エントリや変数全体を削除可能。
# 辞書からの要素削除
# 辞書作成
squares = {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 特定アイテム削除、値を返却
# 出力: 16
print(squares.pop(4))
# 出力: {1: 1, 2: 4, 3: 9, 5: 25}
print(squares)
# 任意アイテム削除、(key,value)返却
# 出力: (5, 25)
print(squares.popitem())
# 出力: {1: 1, 2: 4, 3: 9}
print(squares)
# すべて削除
squares.clear()
# 出力: {}
print(squares)
# 辞書自体を削除
del squares
# エラー発生
print(squares)
出力
16 {1: 1, 2: 4, 3: 9, 5: 25} (5, 25) {1: 1, 2: 4, 3: 9} {} Traceback (most recent call last): File "<string>", line 30, in <module> print(squares) NameError: name 'squares' is not defined
Python辞書メソッド
以下の表は一般的な辞書メソッドとその目的を示します。多くは続く例で実演されています。
| メソッド | 説明 |
|---|---|
| clear() | 辞書からすべてのアイテムを削除 |
| copy() | 辞書の浅いコピーを返す |
| fromkeys(seq[, v]) | seqから新しい辞書を作成、全キーをv(デフォルトNone)に設定 |
| get(key[,d]) | keyの値を返す;不在時はd(デフォルトNone)を返す |
| items() | 辞書の(key, value)ペアのビューを返す |
| keys() | 辞書のキーのビューを返す |
| pop(key[,d]) | keyを削除し値またはdを返す;key不在かつd未指定ならKeyError |
| popitem() | 任意の(key, value)ペアを削除・返却;空ならKeyError |
| setdefault(key[,d]) | keyの値を返す;不在時はkeyをd(デフォルトNone)で挿入しdを返す |
| update([other]) | otherからキー/値ペアを挿入・更新、既存キーを上書き |
| values() | 辞書の値のビューを返す |
使用例:
# 辞書メソッド
marks = {}.fromkeys(['Math', 'English', 'Science'], 0)
# 出力: {'English': 0, 'Math': 0, 'Science': 0}
print(marks)
for item in marks.items():
print(item)
# 出力: ['English', 'Math', 'Science']
print(list(sorted(marks.keys())))
出力
{'Math': 0, 'English': 0, 'Science': 0} ('Math', 0) ('English', 0) ('Science', 0) ['English', 'Math', 'Science']
Python辞書内包表記
辞書内包表記はイテラブルから辞書を構築する簡潔な構文を提供します。パターンは{key: value for element in iterable}です。
# 辞書内包表記
squares = {x: x*x for x in range(6)}
print(squares)
出力
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
等価な命令的バージョン:
squares = {}
for x in range(6):
squares[x] = x*x
print(squares)
出力
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
内包表記には複数のループとifフィルタを含められます。例:奇数の平方のみ。
# if条件付き辞書内包表記
odd_squares = {x: x*x for x in range(11) if x % 2 == 1}
print(odd_squares)
出力
{1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
詳細はPython辞書内包表記を参照。
その他の辞書操作
辞書のメンバーシップテスト
in演算子でキー存在をチェック;値は検査しません。
# キーのメンバーシップテスト
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# 出力: True
print(1 in squares)
# 出力: True
print(2 not in squares)
# メンバーシップテストはキーのみ、値ではない
# 出力: False
print(49 in squares)
出力
True True False
辞書のイテレーション
キーを直接イテレーションし、値にアクセス。
# 辞書のイテレーション
squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
for i in squares:
print(squares[i])
出力
1 9 25 49 81
辞書の組み込み関数
all()、any()、len()、sorted()などの標準関数が頻繁に辞書に適用されます。
| 関数 | 説明 |
|---|---|
| all() | すべてのキーが真と評価されるならTrue(空辞書もTrue) |
| any() | いずれかのキーが真ならTrue;空辞書はFalse |
| len() | キー/値ペアの数 |
| cmp() | 2つの辞書を比較(Python 3で削除) |
| sorted() | キーのソート済みリストを返す |
例:
# 辞書組み込み関数
squares = {0: 0, 1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
# 出力: False
print(all(squares))
# 出力: True
print(any(squares))
# 出力: 6
print(len(squares))
# 出力: [0, 1, 3, 5, 7, 9]
print(sorted(squares))
出力
False True 6 [0, 1, 3, 5, 7, 9]
Python
- Python データ型マスター: 実践ガイド
- Python 演算子完全マスター: 包括的ガイド
- Python pass文完全マスター: 実践ガイド
- Python 関数引数完全マスター: 位置引数・キーワード引数・デフォルト引数
- Pythonイテレータ完全ガイド:仕組みと自作方法
- Pythonクロージャ解説:ネスト関数が変数を捕捉する仕組み
- Python datetimeマスター:日付・時刻・タイムゾーン実践ガイド
- Python 概要:高水準、読みやすい、インタラクティブ、オブジェクト指向
- Python 数値型完全ガイド:不変な数値データ型の理解と活用
- Python 文字列完全マスター:作成、アクセス、操作のすべて
- Python タプル完全ガイド:定義、活用、リストとの違い