辞書とは何ですか?
辞書(dictionary、map、associative array)は、「キーと値」のペアを格納するデータ構造です。各一意のキーには特定の値が対応します。これは、単語(キー)がその定義(値)に関連付けられている通常の辞書に似ています。
Pythonでは、辞書は次のようになります。
student = {
"name": "Anna",
"age": 22,
"specialty": "Programming"
}
print(student["name"]) # 表示:アンナJavaScriptは同様の構文を使用します。
const student = {
name: "Anna",
age: 22,
specialty: "Programming"
};
console.log(student.name); // 表示:アンナ
辞書の基本操作
要素の追加と変更
# Python
grades = {}
grades["Mathematics"] = 5
grades["Physics"] = 4
grades["Mathematics"] = 5 # 既存の値の変更
print(grades) # {'数学': 5, '物理': 4}4}値の取得
# 直接参照(キーがない場合はエラーを引き起こします)
print(grades["Mathematics"]) # 5
# デフォルト値での安全な受信
print(grades.get("Chemistry", 0)) # 0(キーが存在しない場合、デフォルト値が返されます)要素の削除
del grades["Physics"] # キーと値のペアを削除します
# または、popを使用して(削除された値を返します)
math_grade = grades.pop("Mathematics")キーの存在を確認する
if "Physics" in grades:
print("Physics grade is")
else:
print("No rating")ハッシュテーブルとは何ですか?
ハッシュテーブルは、ディクショナリを「フードの下」に実装する方法です。これは、辞書が非常に速く動作することを可能にする魔法です。
ハッシュテーブルの仕組みは?
辞書に要素を追加すると、次のことが起こります。
キーのハッシュ: キーは特別な関数を使用して数値(ハッシュコード)に変換されます
ポジションの決定: ハッシュコードに基づいて、配列内のインデックスが計算されます
値の保存: キーと値のペアはこのインデックスで保存されます
# ハッシュ関数の簡略化された例
def simple_hash(key, table_size):
return sum(ord(char) for char in key) % table_size
# キー「cat」とテーブルサイズ10の場合
hash_value = simple_hash("cat", 10) # 0から9までの数字を返します衝突
異なるキーが同じハッシュを返すことがあります。これは衝突と呼ばれます。それらを解決する方法はいくつかあります。
チェーンメソッド: 2つのペアが同じハッシュを持つ場合、それらは1つのインデックスのリストとして保存されます。
オープンアドレス指定: セルが使用されている場合は、次の空きセルが検索されます。
操作の複雑さ
辞書の主な利点の1つは、その速さです。
要素の追加: 平均 O(1)
アイテム検索: 平均 O(1)
要素の削除: 平均 O(1)
つまり、操作の実行時間は辞書内の要素の数に依存しません。 比較のために、リスト内の検索には O(n) 時間が必要です。各要素をチェックする必要があります。

実用例
要素の頻度の計算
text = "hello world"
letter_count = {}
for letter in text:
if letter in letter_count:
letter_count[letter] += 1
else:
letter_count[letter] = 1
print(letter_count)
# {'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}get()を使用したよりエレガントな方法:
text = "hello world"
letter_count = {}
for letter in text:
letter_count[letter] = letter_count.get(letter, 0) + 1データのグループ化
students = [
{"name": "Anna", "group": "A"},
{"name": "Ivan", "group": "B"},
{"name": "Maria", "group": "A"},
]
groups = {}
for student in students:
group_name = student["group"]
if group_name not in groups:
groups[group_name] = []
groups[group_name].append(student["name"])
print(groups)
# {'A': ['アンナ', 'マリア'], 'B': ['イワン']}結果のキャッシュ
def fibonacci(n, cache={}):
if n in cache:
return cache[n]
if n <= 1:
return n
result = fibonacci(n-1, cache) + fibonacci(n-2, cache)
cache[n] = result
return result
print(fibonacci(100)) # キャッシュにより非常に速く計算されます辞書はいつ使用しますか?
辞書は次のような場合に最適です。
設定と構成の保存
要素の頻度をカウントする
一意の識別子によるクイック検索
データのグループ化と集約
計算のキャッシュ
グラフの表現(隣接リスト)
重要な機能
キーは変更できない必要があります。 Python では、キーは文字列、数値、タプルにすることができますが、リストやその他のディクショナリにはできません。
# 正解
valid_dict = {
"name": "value",
42: "value",
(1, 2): "value"
}
# エラー!リストは変更可能です# invalid_dict = {[1, 2]: "value"}要素の順序: Python 3.7 以降では、辞書は要素を追加する順序を保持しますが、順序が本当に重要な場合にのみこれに依存する必要があります。
生産性: 辞書はリストよりも多くのメモリを消費しますが、アクセス速度でそれを補います。
結論
ディクショナリとハッシュテーブルは、すべての開発者が理解する必要のある基本的なデータ構造です。これらの構造体を使用すると、データを効率的に整理し、多くの実用的なタスクを解決できます。それらの仕組みを理解することで、より速く、より効率的なコードを書くことができます。
プロジェクトで辞書を使い始めると、その力と使いやすさをすぐに実感できるでしょう。簡単なタスクから練習し、徐々に難易度を上げていくことで、すぐに辞書を使った作業が自然になります。
理論は素晴らしいですが、本当の理解は実践を通して得られます。アプリケーションでは コディック 辞書、ハッシュテーブル、その他のデータ構造を使用した演習など、さまざまな難易度のプログラミングタスクが何百も用意されています。自分のペースで問題を解いて、進捗状況を追跡しましょう!
また、私たちには生きたコミュニティがあります Telegramここでは経験豊富な開発者が初心者をサポートし、役立つ資料を共有し、興味深い課題について話し合い、プログラミングのトピックについて話し合います。フレンドリーでサポート的な雰囲気です。どの質問も重要であり、誰も答えを得られないままにされることはありません。 ぜひご参加ください! 👋
