1.1 Dictionaryとその特性
Dictionary(ディクショナリ)はPythonで キーと値のペアの順序付けられたコレクションで、各キーはユニークです。DictionaryはPythonでデータを保存し管理するために使用される、最も柔軟で強力なデータ型の1つです。リストと同じくらい頻繁に使います。すぐにそれを実感できるでしょう :)
Dictionaryの主な特性:
1. ユニークなキー
Dictionaryの各キーはユニークでなければなりません。既に存在するキーを持つキー-値のペアが追加されると、古い値は新しい値に置き換えられます。例えば、学生のデータを保存し、キーとして学生のIDを使用する場合:
students = {"123": "John", "124": "Alice", "123": "Mike"}
print(students) # 出力: {'123': 'Mike', '124': 'Alice'}
2. 順序性
注意!
Python 3.7まで、Dictionaryは順序が保証されないコレクションでした。Python 3.7以降、Dictionaryは要素の追加順序を保持しますが、この側面はPython 3.8までの言語仕様の必須の一部ではなく、標準となりました。
これは5年前のことです。私たちはPython 3.12を学んでいるので、Dictionaryを
順序付けられた要素のセット
と見なして構いません。
3. 変更可能性
Dictionaryは変更可能であり、それはすなわち、Dictionaryの作成後に要素を追加、変更、または削除できることを意味します。例えば、学生の住所を追加してみましょう:
student = {"name": "John", "age": 20}
student["address"] = "123 Main St"
print(student) # 出力: {'name': 'John', 'age': 20, 'address': '123 Main St'}
4. 効率性
Dictionaryはキー-値ペアの高速な検索、追加、および削除に最適化されています。平均して、検索、追加、および削除の操作は一定時間で実行されます(O(1))。アルゴリズムの複雑さについては「アルゴリズムとデータ構造」の章で詳しく学ぶでしょう。
5. キーと値
Dictionaryのキーは不変のデータ型である必要があります。例えば文字列、数字、またはタプルです。値は他のDictionaryを含む任意のデータ型にすることができます。
6. アクセスおよび変更メソッド
Dictionaryは、要素へのアクセス、追加、変更、削除をサポートするさまざまなメソッドを提供しています。これらのメソッドには、get()
、keys()
、values()
、items()
、update()
、pop()
などがあります。詳細は次の講義で説明します。
7. 要素の繰り返し
ループを使用してDictionary内のキー、値、またはキー-値ペアを繰り返し処理することができます。これにより、Dictionaryの要素に対して簡単に操作を実行できます。例えば:
student = {"name": "John", "age": 20, "address": "123 Main St"}
for key, value in student.items():
print(f"{key}: {value}")
出力は以下のようになります:
name: John
age: 20
address: 123 Main St
8. キーのハッシュ可能性
Dictionaryのキーはハッシュ可能でなければなりません。これはキーがその生存期間中に変更されないハッシュ値を持つ必要があることを意味します。ハッシュ値は、任意の長さの入力データを固定長の出力値に変換するハッシュ関数と呼ばれるアルゴリズムによって生成されます。これをハッシュ値またはハッシュコードと呼びます。不変のデータ型、例えば文字列、数字、タプルはハッシュ可能であり、キーとして使用することができます。
ハッシュ関数とハッシュ可能性については「アルゴリズムとデータ構造」テーマで詳しく学びます。
1.2 {}
を使用したDictionaryの作成
Pythonでは、Dictionary(ディクショナリ)を作成する方法はいくつかあります。以下はDictionaryオブジェクトを作成する様々な方法の例です:
中括弧 {}
を使用
最も一般的なDictionaryの作成方法は、中括弧を使用し、コンマで区切られたキー-値ペアを持つことです。キー-値ペアはコロンで区切られます。
# 空のDictionaryを作成
empty_dict = {}
# 要素を持つDictionaryを作成
person = {
"name": "John",
"age": 30,
"city": "New York"
}
print(type(person))
print(person)
重要!
Dictionaryの作成はセットの作成に似ています。実際、キーに値が結びつけられたセットとしてDictionaryを考えても良いです。
中括弧に「キー」を並べるだけでセットが作成され、もしキーの後にコロンがあり値が指定されている場合はDictionaryが作成されます。空の中括弧は常にDictionaryです。
# 空のDictionaryを作成
empty_dict = {}
# 要素を持つセットを作成
unique_items = {
"name",
"age",
"city"
}
print(type(unique_items))
print(unique_items)
1.3 dict()
関数を使用したDictionaryの作成
dict()
関数は、キー-値ペアのシーケンスや名前付き引数からDictionaryを作成するために使用されます。
キー-値ペアのシーケンスを使用した例:
# タプルのリストからDictionaryを作成
person = dict([("name", "John"), ("age", 30), ("city", "New York")])
print(person)
名前付き引数を使用した例。追加の括弧は不要です:
# 名前付き引数を持つDictionaryを作成
person = dict(name="John", age=30, city="New York")
print(person)
dict.fromkeys()
メソッドの使用
fromkeys()
メソッドは、指定されたキーとデフォルトの値を持つDictionaryを作成します。
# キーとデフォルト値を持つDictionaryを作成
keys = ["name", "age", "city"]
default_value = None
person = dict.fromkeys(keys, default_value)
print(person)
Dictionaryは3つのキーを持ちますが、それらはすべて同じ値を持ちます。
1.4 既存の変数からのDictionaryの作成
変数をキーと値として使用して、Dictionaryを作成できます。
# 変数からDictionaryを作成
name = "John"
age = 30
city = "New York"
person = {"name": name, "age": age, "city": city}
print(person)
1.5 Dictionary Comprehensionの使用
Dictionary Comprehensionを使用すると、リスト内包表記に似た短く簡潔な構造でDictionaryを作成できます。
# Dictionary Comprehensionを使用してDictionaryを作成
squares = {x: x**2 for x in range(1, 6)}
print(squares)
1.6 Dictionaryの値へのアクセス
キーを使用して値を取得するには、[]
構文を使用します:
# Dictionaryの値へのアクセス
person = {"name": "John", "age": 30, "city": "New York"}
print(person["name"]) # 出力: John
重要!
キーが見つからない場合、KeyError
エラーが発生します。これを避けるために、キーが存在する場合にはその値を返し、キーが見つからない場合にはNone
(またはデフォルトの他の値)を返すget()
メソッドを使うことができます。
# Dictionaryの値へのアクセスにget()メソッドを使用
person = {"name": "John", "age": 30, "city": "New York"}
print(person.get("name")) # 出力: John
print(person.get("address", "アドレスが見つかりません")) # 出力: アドレスが見つかりません
1.7 Dictionaryの値の変更
Dictionaryの値は、キーを通じてアクセスし、新しい値を割り当てることによって変更できます。
# Dictionaryの値の変更
person = {"name": "John", "age": 30, "city": "New York"}
person["age"] = 31
print(person) # 出力: {'name': 'John', 'age': 31, 'city': 'New York'}
1.8 Dictionaryからの要素の削除
要素はdel
演算子またはpop()
メソッドを使用して削除できます。
# delを使用して要素を削除
person = {"name": "John", "age": 30, "city": "New York"}
del person["age"]
print(person) # 出力: {'name': 'John', 'city': 'New York'}
# pop()を使用して要素を削除
person = {"name": "John", "age": 30, "city": "New York"}
age = person.pop("age")
print(person) # 出力: {'name': 'John', 'city': 'New York'}
print(age) # 出力: 30
1.9 Dictionary内のキーの存在確認
Dictionary内にキーが含まれているかどうかを確認するには、in
演算子を使用します。
# Dictionary内のキーの存在確認
person = {"name": "John", "age": 30, "city": "New York"}
print("name" in person) # 出力: True
print("address" in person) # 出力: False
1.10 Dictionaryの要素の繰り返し
Dictionary内のキー、値、またはキー-値ペアを繰り返し処理できます:
# Dictionaryキーの繰り返し処理
person = {"name": "John", "age": 30, "city": "New York"}
for key in person:
print(key)
# Dictionary値の繰り返し処理
for value in person.values():
print(value)
# Dictionaryキー-値ペアの繰り返し処理
for key, value in person.items():
print(f"{key}: {value}")
1.11 現実の課題でのDictionaryの使用例
現実の生活における、Dictionaryの使用が有効な例をいくつか見てみましょう:
例 1: テキスト内の単語頻度のカウント
テキストがあり、そのテキスト内で各単語が何回出現するかを数えたいとします。
text = "hello world hello"
word_count = {}
for word in text.split():
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
print(word_count) # 出力: {'hello': 2, 'world': 1}
例 2: 学生のデータの保存
学生のデータを保存するためにDictionaryを使用し、キーとして彼らのIDを、値として彼らのデータを持たせることができます。
students = {
"123": {"name": "John", "age": 20, "major": "Computer Science"},
"124": {"name": "Alice", "age": 22, "major": "Mathematics"}
}
print(students["123"]["name"]) # 出力: John
例 3: 電話帳
Dictionaryを使用して、名前をキーとして電話番号を値とする簡単な電話帳を作成できます。
phone_book = {
"John": "123-456-7890",
"Alice": "987-654-3210"
}
print(phone_book["Alice"]) # 出力: 987-654-3210
GO TO FULL VERSION