কম্পিউটার টিউটোরিয়াল

পাইথন ডিকশনারি-এ মিসিং কী হ্যান্ডলিং (KeyError এড়ানো)


সমস্যা

অস্তিত্বহীন কী দিয়ে ডিকশনারি এক্সেস করলে KeyError excepción উঠে।


d = {'India': 'IN', 'Australia': 'AU', 'Brazil': 'BR'}
print(d['Canada'])  # KeyError: 'Canada'

সমাধান ১: get() মেথড (সুপারিশকৃত)


d = {'India': 'IN', 'Australia': 'AU', 'Brazil': 'BR'}

print(d.get('Australia'))          # 'AU'
print(d.get('Canada'))             # None (ডিফল্ট)
print(d.get('Canada', 'Not Found')) # 'Not Found' (কাস্টম ডিফল্ট)
  • কী থাকলে ভ্যালু রিটার্ন, নাইলে ডিফল্ট (None বা ইউজার-ডিফাইনড) রিটার্ন।
  • ডিকশনারি পরিবর্তন হয় না।

সমাধান ২: setdefault() মেথড


d = {'India': 'IN', 'Australia': 'AU', 'Brazil': 'BR'}

# কী না থাকলে ডিফল্ট ভ্যালু সেট করে দেয়
value = d.setdefault('Canada', 'Not Present')
print(value)        # 'Not Present'
print(d['Canada'])  # 'Not Present' (ডিকশনারিতে যোগ হয়েছে)
  • get()-এর মতো, কিন্তু কী না থাকলে ডিকশনারিতে যোগ করে দেয়।
  • ডিফল্ট ভ্যালু মিউটেবল (লিস্ট/ডিক্ট) হলে সতর্ক থাকুন — একই অবজেক্ট শেয়ার হবে।

সমাধান ৩: defaultdict (collections মডিউল)


from collections import defaultdict

# ডিফল্ট ফ্যাক্টরি: ল্যাম্বডা বা টাইপ
d = defaultdict(lambda: 'Key Not Present')
d['India'] = 'IN'
d['Australia'] = 'AU'

print(d['Australia'])  # 'AU'
print(d['Canada'])     # 'Key Not Present' (অটোমেটিক্যালি যোগ হয়েছে)
print(dict(d))         # {'India': 'IN', 'Australia': 'AU', 'Canada': 'Key Not Present'}

সাধারণ ডিফল্ট ফ্যাক্টরি

সমাধান ৪: try/except ব্লক


d = {'India': 'IN', 'Australia': 'AU', 'Brazil': 'BR'}

try:
    value = d['Canada']
except KeyError:
    value = 'Not Found'
    # অথবা d['Canada'] = 'Not Found'  # সেট করতে চাইলে

print(value)

EAFP (Easier to Ask Forgiveness than Permission) স্টাইল — পাইথনিক।

তুলনা টেবিল

ফ্যাক্টরিডিফল্ট ভ্যালুব্যবহার
int0কাউন্টিং
list[]গ্রুপিং/অ্যাকামুলেশন
setset()ইউনিক সংগ্রহ
lambda: default_valকাস্টমযেকোনো ডিফল্ট
পদ্ধতিকী না থাকলেডিক্ট পরিবর্তনব্যবহার কেস
get(key, default)default রিটার্ননাসাধারণ লুকআপ (সর্বাধিক ব্যবহৃত)
setdefault(key, default)default সেট+রিটার্নহ্যাঁক্যাশিং, ইনিশিয়ালাইজেশন
defaultdict(factory)factory() কল করে ভ্যালু বানায়হ্যাঁগ্রুপিং, কাউন্টিং, নেস্টেড ডিক্ট
try/except KeyErrorএক্সেপশন হ্যান্ডলঅপশনালজটিল লজিক, EAFP স্টাইল
key in dictBoolean চেকনাপূর্বে চেক করলে (LBYL)
  1. পাইথনে প্যাটার্ন প্রিন্ট করার পদ্ধতি

  2. পাইথনে দুটি ডিকশনারির কি-গুলোর পার্থক্য (Difference) বের করার পদ্ধতি

  3. পাইথনে ডিকশনারির সব কি প্রিন্ট করার পদ্ধতি

  4. পাইথন ডিকশনারি মাস্টার করুন: কি-ভ্যালু ম্যাপ দক্ষতার সাথে তৈরি, অ্যাক্সেস এবং ব্যবহার করুন