Lesson ৭ মিনিট পড়া

ডিকশনারি এবং সেট (Dictionaries & Sets)

যেকোনো কিছু তাৎক্ষণিকভাবে খুঁজে বের করুন — আসল ডিকশনারির মতোই, তবে যেকোনো কিছুর জন্য

ডিকশনারি — কী-ভ্যালু জোড় (Dictionaries — Key-Value Pairs)

ডিকশনারি হলো আপনার ফোনের কন্টাক্ট লিস্টের মতো। আপনি একজনের নাম (যা হলো key) খোঁজেন এবং তার ফোন নম্বরটি (value) পেয়ে যান। আপনি এখানে পজিশন বা ইনডেক্স অনুযায়ী খোঁজেন না — আপনি নাম দিয়ে খোঁজেন। আর এ কারণেই ডিকশনারিগুলো খুব দ্রুত ডেটা খুঁজে বের করতে পারে।

ডিকশনারি কার্লি ব্রেইস বা দ্বিতীয় বন্ধনী {} দিয়ে তৈরি করা হয় এবং কমা দিয়ে আলাদা করা key: value জোড় ব্যবহার করা হয়। কী (Key)-গুলো অবশ্যই অনন্য (unique) এবং অপরিবর্তনযোগ্য (যেমন স্ট্রিং, নম্বর বা ট্যুপল) হতে হবে। তবে মান বা ভ্যালু (Value) যেকোনো কিছুই হতে পারে।

ডিকশনারি তৈরি এবং ব্যবহার করা (Creating & Using Dictionaries)

# Creating a dictionary
player = {
"name": "Link",
"health": 100,
"items": ["sword", "shield", "boomerang"],
"position": (5, 12)
}
# Accessing values
print(player["name"])
print(player["items"])
# Using .get() — safer, returns None if key doesn't exist
print(player.get("score")) # None (no error!)
print(player.get("score", 0)) # Default value: 0
# How many key-value pairs?
print(len(player))
Output
Link
['sword', 'shield', 'boomerang']
None
0
4

CRUD — তৈরি করা, পড়া, আপডেট করা এবং মুছে ফেলা (Create, Read, Update, Delete)

ডিকশনারিগুলো মিউটেবল বা পরিবর্তনযোগ্য, তাই আপনি স্বাধীনভাবে নতুন এন্ট্রি যোগ করতে, আপডেট করতে এবং মুছে ফেলতে পারবেন। এই চারটি কাজ কীভাবে করা যায় তা নিচে দেখানো হলো:

ডিকশনারি পরিবর্তন করা (Modifying Dictionaries)

pet = {"name": "Buddy", "type": "dog", "age": 3}
# CREATE — add new key
pet["color"] = "golden"
# UPDATE — change existing key
pet["age"] = 4
# DELETE — several ways
removed = pet.pop("color") # Remove and return value
print(f"Removed: {removed}")
del pet["type"] # Delete by key
print(pet)
# Merge dictionaries
defaults = {"lives": 3, "speed": 5}
bonus = {"speed": 10, "shield": True}
combined = {**defaults, **bonus} # bonus overwrites conflicts
print(combined)
# .update() method
defaults.update(bonus)
print(defaults)
Output
Removed: golden
{'name': 'Buddy', 'age': 4}
{'lives': 3, 'speed': 10, 'shield': True}
{'lives': 3, 'speed': 10, 'shield': True}

ডিকশনারির লুপ (Looping Through Dictionaries)

ডিকশনারিগুলো আপনাকে ইটারেট বা লুপ করার তিনটি উপায় দেয়: কী (keys), ভ্যালু (values), অথবা উভয়টির (items) ওপর দিয়ে। .items() মেথডটি সবচেয়ে বেশি ব্যবহার করা হয় — এর মাধ্যমে প্রতিটি লুপে (key, value)-এর একটি ট্যুপল পাওয়া যায়, যা আপনি সহজেই আনপ্যাক করে নিতে পারেন।

ইটারেটিং এবং কার্যকরী প্যাটার্ন (Iterating & Useful Patterns)

grades = {"math": 92, "science": 87, "english": 95, "art": 88}
# Loop through keys (default)
for subject in grades:
print(subject)
print() # blank line
# Loop through values
print(f"Average: {sum(grades.values()) / len(grades):.1f}")
# Loop through key-value pairs
for subject, score in grades.items():
status = "Pass" if score >= 90 else "Good"
print(f"{subject}: {score} ({status})")
print()
# Check if key exists
if "math" in grades:
print(f"Math grade: {grades['math']}")
# Counting pattern
word = "mississippi"
letter_count = {}
for char in word:
letter_count[char] = letter_count.get(char, 0) + 1
print(letter_count)
Output
math
science
english
art

Average: 90.5
math: 92 (Pass)
science: 87 (Good)
english: 95 (Pass)
art: 88 (Good)

Math grade: 92
{'m': 1, 'i': 4, 's': 4, 'p': 2}

সেট — শুধু অনন্য (Unique) আইটেম (Sets — Unique Items Only)

সেট হলো অনন্য মার্বেলের ব্যাগের মতো — এখানে কোনো জিনিসের পুনরাবৃত্তি থাকতে পারবে না, এবং সংরক্ষণের কোনো নির্দিষ্ট ক্রম থাকে না। পুনরাবৃত্তি সরিয়ে ফেলতে, কোনো উপাদান আছে কি না তা দ্রুত যাচাই করতে, এবং গাণিতিক অপারেশন (যেমন ইউনিয়ন, ইন্টারসেকশন, ডিফারেন্স) করার জন্য সেট অত্যন্ত কার্যকর।

সেট এবং সেট অপারেশন (Sets & Set Operations)

# Creating sets
fruits = {"আম", "জাম", "কাঁঠাল", "আম"} # duplicate removed!
print(fruits)
print(len(fruits)) # 3, not 4
# Remove duplicates from a list
numbers = [1, 2, 2, 3, 3, 3, 4]
unique = list(set(numbers))
print(unique)
# Set operations
backend = {"Python", "Java", "Go", "Rust"}
frontend = {"JavaScript", "TypeScript", "Python"}
print(f"Union: {backend | frontend}") # All languages
print(f"Intersection: {backend & frontend}") # In both
print(f"Backend only: {backend - frontend}") # In backend, not frontend
print(f"Exclusive: {backend ^ frontend}") # In one but not both
# Fast membership testing
allowed = {"admin", "editor", "viewer"}
role = "editor"
print(role in allowed) # Much faster than checking a list!
Output
{'কাঁঠাল', 'জাম', 'আম'}
3
[1, 2, 3, 4]
Union: {'Go', 'TypeScript', 'Java', 'JavaScript', 'Python', 'Rust'}
Intersection: {'Python'}
Backend only: {'Go', 'Java', 'Rust'}
Exclusive: {'Go', 'TypeScript', 'Java', 'JavaScript', 'Rust'}
True
Note: x in my_set যাচাই করা অপূর্ব দ্রুত (blazing fast) কাজ করে (কনস্ট্যান্ট টাইমে), যেখানে x in my_list চেক করা লিস্টের আকার বাড়ার সাথে সাথে ধীর হয়ে যায়। যদি আপনাকে খুব ঘনঘন কোনো কিছু যাচাই করতে হয়, তবে প্রথমে আপনার লিস্টটিকে সেটে রূপান্তর করে নিন!
চ্যালেঞ্জ

ছোট কুইজ

আপনি যদি my_dict["missing"] ব্যবহার করে এমন কোনো কী (key) অ্যাক্সেস করেন যা ডিকশনারিতে নেই, তবে কী ঘটবে?

পড়া চালিয়ে যান

Lists & TuplesFunctions