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 রিটার্ন, না থাকলে default | d.get("x", 0) |
keys() | সব key-এর view রিটার্ন | d.keys() |
values() | সব value-এর view রিটার্ন | d.values() |
items() | সব (key, value) tuple-এর view | d.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 করা যায়:
| Operation | Method | Operator | কাজ |
|---|---|---|---|
| Union | a.union(b) | a | b | দুটি set-এর সব element |
| Intersection | a.intersection(b) | a & b | common element |
| Difference | a.difference(b) | a - b | a-তে আছে কিন্তু b-তে নেই |
| Symmetric Diff | a.symmetric_difference(b) | a ^ b | কোনো একটিতে আছে, দুটিতে নয় |
| Subset | a.issubset(b) | a <= b | a-এর সব element b-তে আছে কি? |
| Superset | a.issuperset(b) | a >= b | b-এর সব 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 {} ব্যবহার করে, কিন্তু তাদের উদ্দেশ্য ও গঠন ভিন্ন:
| বৈশিষ্ট্য | Dictionary | Set |
|---|---|---|
| গঠন | key: value জোড়া | শুধু value (unique) |
| Duplicate | Key duplicate হয় না, value হতে পারে | কোনো duplicate নেই |
| Order | Insertion order (3.7+) | Unordered |
| Indexing | Key দিয়ে access | Index/key দিয়ে access করা যায় না |
| Mutable | হ্যাঁ | হ্যাঁ (element immutable হতে হবে) |
| খালি তৈরি | {} বা dict() | set() (⚠️ {} নয়!) |
| ব্যবহার | Data mapping, config, JSON | Unique items, membership test |
কখন কোনটি ব্যবহার করবেন?
- Dictionary — যখন key দিয়ে value খুঁজতে হবে, যেমন: student info, config settings, word count
- Set — যখন unique element রাখতে হবে বা membership test দ্রুত করতে হবে, যেমন: duplicate সরানো, common element বের করা
# বাস্তব উদাহরণ — শব্দের ফ্রিকুয়েন্সি গণনা (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) # {'রহিম', 'সাদিয়া'}
Dictionary-তে in দিয়ে key খোঁজা হয়, value নয়। Set-এ in দিয়ে element খোঁজা হয়। দুটি ক্ষেত্রেই in operator O(1) সময়ে কাজ করে — list-এর O(n)-এর চেয়ে অনেক দ্রুত!