{}const=>[]async()letfn</>var
開発基礎

辞書とハッシュテーブル:初心者開発者のための完全ガイド

プログラミングで最も重要なデータ構造であるディクショナリとハッシュテーブルの仕組みを学びましょう。この記事では、キーと値のペアの操作の原則、ハッシュメカニズム、衝突の解決方法、および実際の使用例を簡単な言葉で説明します。

К

Kodik

著者

2分で読める

辞書とは何ですか?

辞書(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);  // 表示:アンナ

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

辞書の基本操作

要素の追加と変更

# 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")

ハッシュテーブルとは何ですか?

ハッシュテーブルは、ディクショナリを「フードの下」に実装する方法です。これは、辞書が非常に速く動作することを可能にする魔法です。

ハッシュテーブルの仕組みは?

辞書に要素を追加すると、次のことが起こります。

  1. キーのハッシュ: キーは特別な関数を使用して数値(ハッシュコード)に変換されます

  2. ポジションの決定: ハッシュコードに基づいて、配列内のインデックスが計算されます

  3. 値の保存: キーと値のペアはこのインデックスで保存されます

# ハッシュ関数の簡略化された例
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ここでは経験豊富な開発者が初心者をサポートし、役立つ資料を共有し、興味深い課題について話し合い、プログラミングのトピックについて話し合います。フレンドリーでサポート的な雰囲気です。どの質問も重要であり、誰も答えを得られないままにされることはありません。 ぜひご参加ください! 👋

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要