डिक्शनरी क्या है? कुंजी-मान जोड़े
डिक्शनरी (dict) डेटा को { } में कुंजी: मान जोड़ों के रूप में रखती है।
marks = {"Ravi": 85, "Asha": 92}- हर कुंजी अद्वितीय होनी चाहिए और अपरिवर्तनशील: str, int, float या tuple (list नहीं)।
- मान किसी भी प्रकार का और दोहराया भी जा सकता है।
- dict परिवर्तनशील है: जोड़े जोड़े, बदले और हटाए जा सकते हैं।
- पायथन 3.7 से जोड़े उसी क्रम में रहते हैं जिसमें डाले गए, पर उन तक कुंजी से पहुँचते हैं, इंडेक्स से नहीं।
डिक्शनरी बनाना
d = {} # ख़ाली
d = dict() # ख़ाली
d = {"roll": 5, "name": "Ira"}
d = dict(roll=5, name="Ira")
d = dict([("roll", 5), ("name", "Ira")])
d = {}
for i in range(3): # इनपुट से
n = input("नाम: ")
d[n] = int(input("अंक: "))
पढ़ना और ट्रैवर्स करना
d[key] मान देता है; न मिलने वाली कुंजी पर KeyError। d.get(key, default) त्रुटि की जगह default (या None) देता है।
key in d जाँचता है कि कुंजी है या नहीं (यह कुंजियाँ जाँचता है, मान नहीं)।
for k in d: # कुंजियाँ
print(k, d[k])
for k, v in d.items(): # जोड़े
print(k, v)
अपडेट और डिलीट
d[key] = value: कुंजी पहले से है तो मान बदलता है; नहीं है तो नया जोड़ा जुड़ता है।d.update(d2): एक साथ कई जोड़े जोड़ता या बदलता है।del d[key]: जोड़ा हटाता है (न हो तो KeyError)।d.pop(key): हटाकर मान लौटाता है।d.popitem(): आख़िरी डाला जोड़ा हटाकर लौटाता है।d.clear(): डिक्शनरी ख़ाली करता है।
डिक्शनरी के मेथड और फ़ंक्शन
len(d): जोड़ों की संख्याd.keys(),d.values(),d.items(): कुंजियाँ, मान, जोड़ेd.get(k, default)d.update(d2),d.pop(k),d.popitem(),d.clear()d.copy(): अलग कॉपीdict.fromkeys(keys, value): दी गई कुंजियों वाली नई dict, सबका मान valued.setdefault(k, v): d[k] लौटाता है; k न हो तो v के साथ जोड़ देता हैsorted(d): कुंजियों की क्रमबद्ध list;max(d),min(d)कुंजियों पर
करके देखें: अक्षर गिनो
यह प्रोग्राम लिखें और अपने नाम से चलाएँ:
word = input("शब्द: ")
d = {}
for ch in word:
d[ch] = d.get(ch, 0) + 1
print(d)पहले "banana" का आउटपुट अनुमान लगाएँ। फिर 3D का कदम 6 खोलें, वही शब्द लिखें और हर लॉकर भरते देखें।
मुख्य सूत्र और परिभाषाएँ
- d = {key: value, …}; कुंजियाँ अद्वितीय और अपरिवर्तनशील
- d[k] = v → नई हो तो जोड़ो, पुरानी हो तो बदलो
- d.get(k, default) से KeyError नहीं
- keys(), values(), items(), update(), pop(), popitem(), clear(), copy(), fromkeys(), setdefault()
हल किए गए उदाहरण
1. d = {"a": 1, "b": 2}। d["c"] = 3 और d["a"] = 10 के बाद d क्या होगी?
"c" नई → जुड़ी। "a" पुरानी → बदली। d = {"a": 10, "b": 2, "c": 3}।
2. d = {"pen": 10, "book": 50}। d.get("bag") और d.get("bag", 0) क्या लौटाएँगे?
None और 0। दोनों त्रुटि नहीं देते, जबकि d["bag"] KeyError देता।
3. {"Mon": 30, "Tue": 45, "Wed": 25} के मानों का योग निकालें।
sum(d.values()) = 30 + 45 + 25 = 100।
4. marks = {"Ravi": 85, "Asha": 92, "Mohan": 78} से टॉपर का नाम छापने का प्रोग्राम लिखें।
top = "" best = -1 for k, v in marks.items(): if v > best: best, top = v, k print(top) → Asha
5. "banana" में हर अक्षर गिनें।
हर अक्षर के लिए d[ch] = d.get(ch, 0) + 1: {"b": 1, "a": 3, "n": 2}।
6. d = {1: "x", 2: "y", 3: "z"}। d.pop(2) और d.popitem() के बाद d?
pop(2) से 2: "y" हटा → {1: "x", 3: "z"}। popitem() आख़िरी जोड़ा (3, "z") हटाता है → {1: "x"}।
आम गलतियाँ
- "पहला" आइटम पाने के लिए d[0] लिखना; dict कुंजी से चलती है, इंडेक्स से नहीं।
- list को कुंजी बनाना; कुंजी अपरिवर्तनशील होनी चाहिए।
- "value in d" से मान ढूँढने की उम्मीद; in केवल कुंजियाँ जाँचता है।
- यह सोचना कि दोहराई कुंजी दोनों मान रखेगी; बाद वाला पहले वाले को हटा देता है।