Data Structures · #8 / 11

Dictionaries

Key-value mapping, methods, और आंतरिक रचना

यह क्यों मायने रखता है

Hash maps औसतन O(1) समय में समस्याओं के एक बड़े वर्ग को सुलझा देते हैं।

मूल विचार

एक dict एक तेज़ lookup table है: key → value। Keys hashable होनी चाहिए (यानी: strings, numbers, tuples — lists नहीं)। Python 3.7 से, dicts insertion का क्रम याद रखते हैं।

आज़माकर देखिए

बनाना, lookup, default मान:

prices = {"apple": 1.0, "banana": 0.5}
prices["cherry"] = 2.5
print(prices)

# .get() returns a default instead of raising KeyError
print(prices.get("grape", 0.0))

# setdefault() inserts if missing, then returns the value
prices.setdefault("date", 3.0)
print(prices)
not loaded

गिनती — चिर-परिचित "frequency" मुहावरा:

from collections import Counter

text = "mississippi"
counts = Counter(text)
print(counts)
print(counts.most_common(2))
not loaded

Iterating: items() (key, value) tuples देता है — unpacking के लिए एकदम सही।

scores = {"Ada": 95, "Linus": 88, "Margaret": 99}
for name, score in scores.items():
  print(f"{name:>10}: {score}")

# Dict comprehension
inverted = { score: name for name, score in scores.items() }
print(inverted)
not loaded

मुख्य dict methods (ज़रूर जानें)

| Method | यह क्या करता है | उदाहरण | | --- | --- | --- | | get(k, d) | सुरक्षित lookup | d.get("x", 0) | | keys() | keys का view | list(d.keys()) | | values() | values का view | list(d.values()) | | items() | जोड़ों का view | list(d.items()) | | update(...) | merge/update | d.update({"x":1}) | | pop(k) | key हटाता है | d.pop("x") | | popitem() | आख़िरी जोड़ा हटाता है | d.popitem() | | setdefault(k, d) | get या set | d.setdefault("x", 0) | | copy() | shallow copy | d.copy() | | fromkeys(keys, v) | प्रारंभ | dict.fromkeys(keys, 0) |

Grouping pattern

setdefault "items को key के अनुसार बकेट में बाँटना" एक पंक्ति में कर देता है:

groups = {}
for item in items:
    groups.setdefault(item[0], []).append(item)

Two Sum pattern

चिर-परिचित "जो देखा उसे याद रखो" वाली hash तरकीब — O(n²) के बजाय O(n):

def two_sum(nums, target):
    seen = {}
    for i, x in enumerate(nums):
        need = target - x
        if need in seen:
            return [seen[need], i]
        seen[x] = i

झटपट जाँच

छोटे अभ्यास

क्या करें और क्या न करें

और गहराई में — dictionaries कैसे काम करते हैं

Hash table की आंतरिक रचना

  • Hash table: keys को hash करके table में एक index बनाया जाता है।
  • Collisions: अलग-अलग keys एक ही index पर map हो सकती हैं।
  • समाधान: CPython probing के साथ open addressing इस्तेमाल करता है (औसतन तेज़)।
  • Load factor: जैसे-जैसे table भरता है, Python lookups तेज़ रखने के लिए उसे फिर से आकार देता है।

Hashability के नियम

  • Hashable: int, float, str, tuple (अगर इसके तत्व hashable हों), frozenset
  • Unhashable: list, dict, set

क्रम की गारंटी

  • Python 3.7+ insertion का क्रम सुरक्षित रखता है (एक आधिकारिक भाषा गारंटी)।

आम ग़लतियाँ

मुख्य बातें