HomeCoursesPython
Chapter 8 of 14

ডিকশনারি ও সেট

Dictionary key-value pairs, set operations, methods & practical examples

Dictionary কী?

Python-এ dictionary (সংক্ষেপে dict) হলো key-value pair-এর একটি collection। প্রতিটি key একটি unique identifier এবং প্রতিটি key-এর সাথে একটি value যুক্ত থাকে। Dictionary unordered (Python 3.7+ এ insertion order সংরক্ষিত), mutable এবং key duplicate হতে পারে না।

Dictionary তৈরি করা

# Curly braces দিয়ে dictionary তৈরি
student = {
    "name": "রহিম",
    "age": 22,
    "dept": "CSE",
    "gpa": 3.75
}

# dict() constructor ব্যবহার
person = dict(name="করিম", age=25, city="ঢাকা")

# খালি dictionary
empty_dict = {}
another_empty = dict()

Value অ্যাক্সেস করা

# Key দিয়ে value বের করা
print(student["name"])     # রহিম
print(student["gpa"])      # 3.75

# get() method — key না থাকলে None রিটার্ন করে (error হয় না)
print(student.get("phone"))        # None
print(student.get("phone", "N/A")) # N/A (default value)

# Key দিয়ে value পরিবর্তন ও নতুন key যোগ
student["age"] = 23          # existing key আপডেট
student["phone"] = "01700"   # নতুন key-value যোগ
🔑 মনে রাখুন
  • Dictionary key অবশ্যই immutable হতে হবে — string, number, tuple হতে পারে, কিন্তু list হতে পারে না
  • dict["key"] — key না থাকলে KeyError হয়; dict.get("key") — key না থাকলে None দেয়
  • Python 3.7+ এ dictionary insertion order মনে রাখে

Dictionary Methods

Dictionary-তে অনেক দরকারি built-in method আছে। নিচের টেবিলে সবচেয়ে বেশি ব্যবহৃত method গুলো দেখানো হলো:

Methodকাজউদাহরণ
get(key, default)Key-এর value রিটার্ন, না থাকলে defaultd.get("x", 0)
keys()সব key-এর view রিটার্নd.keys()
values()সব value-এর view রিটার্নd.values()
items()সব (key, value) tuple-এর viewd.items()
update(other)অন্য dict দিয়ে আপডেট করেd.update({"a": 1})
pop(key)Key মুছে value রিটার্ন করেd.pop("name")
setdefault(key, val)Key না থাকলে val সেট ও রিটার্নd.setdefault("x", [])
clear()সব item মুছে দেয়d.clear()
# Dictionary methods ব্যবহার
info = {"name": "সাদিয়া", "age": 20, "city": "চট্টগ্রাম"}

print(info.keys())    # dict_keys(['name', 'age', 'city'])
print(info.values())  # dict_values(['সাদিয়া', 20, 'চট্টগ্রাম'])
print(info.items())   # dict_items([('name', 'সাদিয়া'), ('age', 20), ...])

# update — একসাথে একাধিক key পরিবর্তন/যোগ
info.update({"age": 21, "dept": "EEE"})

# pop — নির্দিষ্ট key মুছে দেয়
removed = info.pop("city")  # 'চট্টগ্রাম'

Dictionary Iteration

Dictionary-র উপর for loop চালানোর বিভিন্ন উপায় আছে:

scores = {"Math": 95, "English": 88, "Physics": 92}

# শুধু key iterate করা
for subject in scores:
    print(subject)              # Math, English, Physics

# key-value একসাথে iterate করা
for key, value in scores.items():
    print(f"{key}: {value}")    # Math: 95, English: 88, ...

# শুধু value iterate করা
for val in scores.values():
    print(val)                  # 95, 88, 92

Dictionary Comprehension

List comprehension-এর মতোই dictionary comprehension দিয়ে সংক্ষেপে dict তৈরি করা যায়:

# সংখ্যার বর্গ — dict comprehension
squares = {x: x**2 for x in range(1, 6)}
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

# শর্ত সহ — শুধু পাস করা ছাত্রদের dict
marks = {"রহিম": 75, "করিম": 32, "সাদিয়া": 90, "জামিল": 28}
passed = {name: m for name, m in marks.items() if m >= 40}
# {'রহিম': 75, 'সাদিয়া': 90}

Set কী?

set হলো unordered, unique element-এর collection। এখানে কোনো duplicate element থাকে না এবং element গুলো immutable হতে হয়। Set নিজে mutable — এতে element যোগ/বাদ দেওয়া যায়।

# Set তৈরির উপায়
fruits = {"আম", "জাম", "লিচু", "আম"}  # duplicate সরে যাবে
print(fruits)  # {'আম', 'জাম', 'লিচু'}

# set() constructor
nums = set([1, 2, 3, 2, 1])  # {1, 2, 3}

# খালি set (⚠️ {} দিলে dict হবে!)
empty_set = set()

# Set-এ element যোগ ও বাদ
fruits.add("কাঁঠাল")
fruits.remove("জাম")     # না থাকলে KeyError
fruits.discard("পেয়ারা") # না থাকলেও error হয় না
💡 মনে রাখার কৌশল

Dictionary = Duo (জোড়া) — সবকিছু key:value জোড়ায় থাকে।
Set = Single ও Special — প্রতিটি element একক ও অনন্য, কোনো duplicate নেই।
খালি {} = dict, খালি set = set() — এটি সবচেয়ে common ভুল!

Set Operations

গাণিতিক set theory-র মতো Python set-এও union, intersection, difference ইত্যাদি operation করা যায়:

OperationMethodOperatorকাজ
Uniona.union(b)a | bদুটি set-এর সব element
Intersectiona.intersection(b)a & bcommon element
Differencea.difference(b)a - ba-তে আছে কিন্তু b-তে নেই
Symmetric Diffa.symmetric_difference(b)a ^ bকোনো একটিতে আছে, দুটিতে নয়
Subseta.issubset(b)a <= ba-এর সব element b-তে আছে কি?
Superseta.issuperset(b)a >= bb-এর সব element a-তে আছে কি?
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}

print(a | b)   # {1, 2, 3, 4, 5, 6, 7, 8}  — Union
print(a & b)   # {4, 5}                     — Intersection
print(a - b)   # {1, 2, 3}                  — Difference
print(a ^ b)   # {1, 2, 3, 6, 7, 8}         — Symmetric Difference

# Subset / Superset পরীক্ষা
small = {1, 2}
print(small <= a)   # True — small, a-এর subset
print(a >= small)   # True — a, small-এর superset

Dictionary vs Set তুলনা

Dictionary এবং Set দুটোই curly braces {} ব্যবহার করে, কিন্তু তাদের উদ্দেশ্য ও গঠন ভিন্ন:

বৈশিষ্ট্যDictionarySet
গঠনkey: value জোড়াশুধু value (unique)
DuplicateKey duplicate হয় না, value হতে পারেকোনো duplicate নেই
OrderInsertion order (3.7+)Unordered
IndexingKey দিয়ে accessIndex/key দিয়ে access করা যায় না
Mutableহ্যাঁহ্যাঁ (element immutable হতে হবে)
খালি তৈরি{} বা dict()set() (⚠️ {} নয়!)
ব্যবহারData mapping, config, JSONUnique items, membership test

কখন কোনটি ব্যবহার করবেন?

# বাস্তব উদাহরণ — শব্দের ফ্রিকুয়েন্সি গণনা (dict)
text = "আমি বাংলায় গান গাই আমি বাংলার গান গাই"
words = text.split()
freq = {}
for word in words:
    freq[word] = freq.get(word, 0) + 1
print(freq)
# {'আমি': 2, 'বাংলায়': 1, 'গান': 2, 'গাই': 2, 'বাংলার': 1}

# বাস্তব উদাহরণ — দুটি ক্লাসের common ছাত্র (set)
class_a = {"রহিম", "করিম", "সাদিয়া", "জামিল"}
class_b = {"সাদিয়া", "নাহিদ", "রহিম", "তানিয়া"}
common = class_a & class_b
print(common)  # {'রহিম', 'সাদিয়া'}
🔑 Dict ও Set-এ `in` অপারেটর

Dictionary-তে in দিয়ে key খোঁজা হয়, value নয়। Set-এ in দিয়ে element খোঁজা হয়। দুটি ক্ষেত্রেই in operator O(1) সময়ে কাজ করে — list-এর O(n)-এর চেয়ে অনেক দ্রুত!

🧠 Quick Check
এই অধ্যায়ের উপর ৫টি প্রশ্নের উত্তর দিন
Q1. d = {"a": 1, "b": 2} হলে d.get("c", 0) কী রিটার্ন করবে?
✅ সঠিক উত্তর: গ) 0get() method-এ key না থাকলে দ্বিতীয় argument (default value) রিটার্ন করে। এখানে "c" key নেই, তাই default 0 রিটার্ন হবে।
Q2. s = {1, 2, 3, 2, 1} হলে len(s) কত?
✅ সঠিক উত্তর: খ) 3। Set-এ duplicate element থাকে না। তাই {1, 2, 3, 2, 1} আসলে {1, 2, 3} হয়ে যায়, যার length 3।
Q3. a = {1,2,3}b = {3,4,5} হলে a & b কী?
✅ সঠিক উত্তর: খ) {3}& operator হলো intersection — দুটি set-এ common element বের করে। শুধুমাত্র 3 উভয় set-এ আছে।
Q4. Python-এ খালি set তৈরি করতে কোনটি সঠিক?
✅ সঠিক উত্তর: খ) empty = set(){} লিখলে Python সেটাকে empty dictionary মনে করে। তাই খালি set তৈরি করতে অবশ্যই set() ব্যবহার করতে হবে।
Q5. Dictionary-তে in operator কোথায় search করে?
✅ সঠিক উত্তর: খ) keys-এ"name" in student লিখলে Python শুধু keys-এ "name" খোঁজে। values-এ খুঁজতে হলে "value" in student.values() লিখতে হবে।
← Previous: লিস্ট ও টাপল Next: ফাংশন →