【Python】辞書型(dict)| 追加・取り出し・ソート方法

【Python】辞書型(dict)| 追加・取り出し・ソート方法

Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:1,808 / 総アクセス数:330 views

Pythonの辞書型(dict)は、データをキーと値のペアで管理するデータ構造です。本記事では、辞書型の基本から、操作方法、イテレーション、応用例、さらには辞書内包表記やJSONとの連携方法まで詳しく解説します。辞書を活用することで、データ管理をより効率的に行うことができます。

Pythonでデータを柔軟かつ効率的に扱いたいなら、辞書型(dict)の理解は欠かせません。本記事では、辞書型の基本構文から安全なアクセス方法、ループ処理、内包表記、ネスト構造、さらにはJSONとの連携までを、初心者にもわかりやすく丁寧に解説します。実用的なコード例を交えながら、辞書型の持つ力を最大限に引き出すための知識を身につけましょう。

辞書型はキーと値のペアを管理するデータ構造

Pythonの辞書型(dict)は、キーと値のペアを管理するデータ構造で、リストやタプルと並ぶ基本的なデータ型の一つです。キーを使って値にアクセスできるため、高速なデータ検索や管理が可能です。辞書型はJSONフォーマットとの親和性が高く、JavaScriptをはじめとする他のプログラミング言語とのデータ交換も簡単に行えます。

例えば、ユーザー情報を管理する際に、名前、年齢、住所などの属性と、それぞれの実際の値を関連付けて保存できます。そのため、Web開発、API連携、設定ファイルの管理といった幅広い用途で活用されています。

辞書の作成とデータアクセス

辞書は波括弧 {} を使って作成し、キーと値はコロン : で結びます。以下は基本的な辞書の作成例です。

dict-create01.py
# 辞書の作成
user_info = {"name": "山田太郎", "age": 30, "city": "東京"}
print(user_info) # => {'name': '山田太郎', 'age': 30, 'city': '東京'}

キーを指定して特定の値を取得するには、対応するキーを角括弧 [] で指定します。

dict-create02.py
# 辞書の作成
user_info = {"name": "山田太郎", "age": 30, "city": "東京"}
# 値の取得
print(user_info["name"]) # => 山田太郎

ただし存在しないキーを指定すると KeyError が発生します。

dict-create04.py
person = {"name": "Alice", "age": 25, "city": "Tokyo"}
print(person["job"]) # 出力: KeyError: 'job'

辞書のデータ取得(get)

存在しないキーにアクセスしようとするとKeyErrorが発生しますが、get() メソッドを使用すれば、デフォルト値を指定してエラーを回避できます。

dict-get01.py
person = {"name": "Alice", "age": 25, "city": "Tokyo"}
print(person.get("name", "未設定")) # 出力: Alice
print(person.get("age", "未設定")) # 出力: 25
print(person.get("city", "未設定")) # 出力: Tokyo
print(person.get("job", "未設定")) # 出力: 未設定

辞書のデータを追加・更新する

辞書は動的にキーと値のペアを追加でき、既存のキーに対しては値を更新することができます。

dict-update01.py
person = {"name": "Alice", "age": 25, "city": "Tokyo"}
person["job"] = "Engineer" # 新しいキーと値を追加
person["age"] = 26 # 既存の値を更新
print(person) # 出力: {'name': 'Alice', 'age': 26, 'city': 'Tokyo', 'job': 'Engineer'}

辞書のキー存在確認(in)

辞書に特定のキーが存在するかどうかは、in 演算子で確認できます。条件分岐と組み合わせることで、より安全なコードを書くことができます。

dict-in01.py
person = {"name": "Alice", "age": 25, "city": "Tokyo"}
if "name" in person:
print("名前が登録されています。") # 出力: 名前が登録されています。

辞書のデータ削除(del,pop)

不要になったデータは del 文や pop() メソッドで削除できます。pop() メソッドは削除と同時に値を取得できる点が便利です。

dict-del01.py
person = {'name': 'Alice', 'age': 26, 'city': 'Tokyo', 'job': 'Engineer'}
del person["city"]
print(person) # 出力: {'name': 'Alice', 'age': 26, 'job': 'Engineer'}
job = person.pop("job") # 削除しつつ値を取得
print(job) # 出力: Engineer
print(person) # 出力: {'name': 'Alice', 'age': 26}

辞書の繰り返し処理(for)

辞書はイテレータブルなオブジェクトなので、for ループを使ってキー、値、またはその両方を順次処理できます。

dict-for01.py
person = {'name': 'Alice', 'age': 26}
# キーを取得してループ処理
for key in person.keys():
print(key) # 出力: name, age
# 値を取得してループ処理
for value in person.values():
print(value) # 出力: Alice, 26
# キーと値のペアを取得してループ処理
for key, value in person.items():
print(f"{key}: {value}") # 出力: name: Alice, age: 26

Python辞書型の応用的な使い方

辞書のソート方法

Pythonでは辞書をそのままソートすることはできませんが、sorted() 関数と辞書のメソッドを組み合わせることで、キーや値に基づいてソートされた新しいリストや辞書を作ることができます。

辞書をキーでソート

dict-sort01.py
data = {"b": 3, "a": 1, "c": 2}
sorted_keys = sorted(data.items())
print(dict(sorted_keys)) # => {'a': 1, 'b': 3, 'c': 2}

辞書を値でソート

dict-sort02.py
data = {"b": 3, "a": 1, "c": 2}
sorted_values = sorted(data.items(), key=lambda x: x[1])
print(dict(sorted_values)) # => {'a': 1, 'c': 2, 'b': 3}

辞書のソートは表示順を整えたいときや、値の大小を基準に並べたいときに便利です。

内包表記による辞書の作成

辞書内包表記を使用することで、簡潔で読みやすいコードで辞書を生成できます。

dict-comp01.py
# キーと値の2乗を持つ辞書を作成
squares = {x: x**2 for x in range(1, 6)}
print(squares) # 出力: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

条件を指定してフィルタリングも可能です。

dict-comp02.py
# 偶数のキーのみを持つ辞書を作成
even_squares = {x: x**2 for x in range(1, 11) if x % 2 == 0}
print(even_squares) # 出力: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}

辞書をネストする

辞書はネスト(入れ子構造)やリストと組み合わせることで、より複雑なデータ構造を作成できます。辞書の値として別の辞書を設定することで、階層的な情報を効率的に管理できます。

dict-nest01.py
students = {
"Alice": {"age": 25, "city": "Tokyo"},
"Bob": {"age": 30, "city": "Osaka"}
}
print(students["Alice"]["city"]) # 出力: Tokyo
print(students["Bob"]["age"]) # 出力: 30

また、複数の辞書をリストとしてまとめることで、一覧データを構造化することができます。

dict-nest02.py
people = [
{"name": "Alice", "age": 25},
{"name": "Bob", "age": 30}
]
for person in people:
print(person["name"]) # 出力: Alice, Bob
print(person["age"]) # 出力: 25, 30

辞書とJSONを組み合わせる

Pythonの辞書型は、JSON形式との相互変換が容易であり、API通信やデータの保存・読み込みに活用されます。json.dumps() を使って辞書を文字列に変換し、json.loads() で再度辞書に戻すことができます。

dict-json01.py
import json
# 辞書をJSON文字列に変換
person_dict = {"name": "Alice", "age": 25, "city": "Tokyo"}
json_str = json.dumps(person_dict, ensure_ascii=False)
print(json_str) # 出力: {"name": "Alice", "age": 25, "city": "Tokyo"}
# JSON文字列を辞書に変換
person_dict_loaded = json.loads(json_str)
print(person_dict_loaded["name"]) # 出力: Alice

このように、辞書型とJSONを組み合わせることで、データのシリアライズやストレージ管理が容易になります。

また、JSONファイルを保存・読み込みすることも可能です。json.dump() で書き込み、json.load() で読み込みます。

dict-json02.py
import json
person_dict = {"name": "Alice", "age": 25, "city": "Tokyo"}
# JSONファイルに書き込み
with open("data.json", "w", encoding="utf-8") as f:
json.dump(person_dict, f, ensure_ascii=False, indent=4)
# JSONファイルを読み込み
with open("data.json", "r", encoding="utf-8") as f:
data = json.load(f)
print(data["city"]) # 出力: Tokyo

Python辞書まとめ

  • Pythonの辞書型は、データの管理や検索に便利なデータ構造です。
  • 辞書内包表記を活用すると、シンプルかつ効率的なコードを書くことができます。
  • JSONとの相互変換が容易なため、APIやデータ処理の場面でも活躍します。

Pythonで扱うデータが複雑になるほど、辞書型の重要性も増していきます。基本操作や応用方法を理解することで、効率的なプログラムを書くことが可能になります。辞書型の使い方を身につけて、コードの品質と可読性を向上させていきましょう。

Pythonユーザにお勧めの本

人気

スッキリわかるPython入門 第2版 スッキリわかるシリーズ

難易度
実用性
読みやすさ

対話形式でスラスラ読める。複雑な概念もキャラクターが分かりやすく解説してくれます。

独習Python

難易度
実用性
網羅性

言語仕様を深く解説。なんとなく書ける状態から、自信を持って書ける状態へ引き上げてくれます。

Python1年生 第2版 体験してわかる!会話でまなべる!プログラミングのしくみ

難易度
実用性
読みやすさ

イラスト中心で、プログラミングの楽しさを教えてくれる。ワクワクしながら学べる入門書です。


以上で本記事の解説を終わります。
よいITライフを!

Pythonユーザにお勧めの本

人気

スッキリわかるPython入門 第2版 スッキリわかるシリーズ

難易度
実用性
読みやすさ

対話形式でスラスラ読める。複雑な概念もキャラクターが分かりやすく解説してくれます。

人気記事


記事を評価

Thanks!
目次
Scroll to Top