Python Data Types Part-5: Python Dictionary

Python Dictionary

Python Dictionary

Python Language এ Dictionary কি?

Python Language এ List এর মতই আরেকটি ডাটা স্ট্রাকচার হচ্ছে Dictionary., পার্থক্যটা হচ্ছে List এ থাকে বাই ডিফল্ট number index আর Dictionary তে থাকে Key. List এর index গুলো নিজে নিজেই তৈরী হয়, আর Dictionary এর key গুলোকে Manually বসিয়ে দিতে হয়। আরো সহজভাবে বলা যায় , Dictionary তে Data গুলো থাকে জোড়ায় জোড়ায়। আর জোড়ার মধ্যে প্রথম জিনিসটিকে বলে কি (key) আর দ্বিতীয় জিনিসটিকে বলে ভ্যালু (value)। Dictionary তে key হিসেবে string, integer এমনকি tuple ও ব্যবহার করতে পারবেন। List এ যেমন index নম্বর একটা value কে নির্দেশ করে ঠিক তেমনি করে Dictionary তে একটা কী (Key) একটা value কে নির্দেশ করে। এই value টা String, Integer, Float, List, Tuple ইত্যাদি যেকোন টাইপেরই হতে পারে। একটা Dictionary এর প্রতিটা key ইউনিক হতে হয়, অর্থাৎ , একটার সাথে অপরটা মিলতে পারবে না। তবে একই value কয়েকবার থাকতে পারে।

Dictionary কিভাবে তৈরী করা হয়?

(curly braces) { } ব্র্যাকেট এর মধ্যে ( : ) কোলন চিহ্ন দিয়ে key-value জোড় তৈরি করে এবং প্রত্যেক জোড় কে কমা ( , ) দিয়ে আলাদা করে একটি Dictionary তৈরি করা যায় । এ ছাড়াও আপনি dict() function দিয়েও Dictionary তৈরী করতে পারেন। চলুন কয়েকটি উদাহরণ দেখা যাক :

# empty dictionary
my_dict = {}

# dictionary with integer keys
my_dict = {1: 'apple', 2: 'ball'}

# dictionary with mixed keys
my_dict = {'name': 'Maruf', 1: [2, 4, 3]}

# using dict()
my_dict = dict({1:'apple', 2:'ball'})

# from sequence having each item as a pair
my_dict = dict([(1,'apple'), (2,'ball')])

Dictionary এর Item গুলোতে কিভাবে access করবেন?

Dictionary এর প্রত্যেকটি Element কে access করার নিয়ম List এর মতই। List এ যেমন [ ] থার্ড ব্র্যাকেট এর মধ্যে index দিয়ে উক্ত ইনডেক্সের value print করতে হয়, তেমনি Dictionary এর ক্ষেত্রেও থার্ড ব্র্যাকেট এর মধ্যে ইনডেক্সের যায়গায় key ব্যবহার করে উক্ত key এর value তে access করতে হয়। এ ছাড়া আপনি get() Method দিয়েও Dictionary Item গুলোতে access করতে পারেন। নিচের উদাহরণ লক্ষ্য করুন :

my_dict = {'name':'Jaber', 'age': 26}

# Output: Jaber
print(my_dict['name'])

# Output: 26
print(my_dict.get('age'))

# Trying to access keys which doesn't exist throws error
# my_dict.get('address')
# my_dict['address']

কিভাবে Dictionary তে পুরাতন Item Update বা নতুন Item add করবেন?

Dictionary তে কোন Item কে Insert বা Update করা খুবই সহজ কাজ। আর এর জন্য শুধু key দিয়ে তাতে নতুন ডাটা অ্যাসাইন করলেই হবে। যদি ঐ key ইতিমধ্যে থেকে থাকে তাহলে Dictionary Update হয়ে যাবে। আর যদি key টি পূর্ব থেকে না থেকে থাকে , তাহলে এটি নতুন Item হিসেবে Dictionary তে add হয়ে যাবে। যেমন:

my_dict = {'name':'Jahir', 'age': 26}

# update value
my_dict['age'] = 27

#Output: {'age': 27, 'name': 'Jahir'}
print(my_dict)

# add item
my_dict['address'] = 'Dhaka,Bangladesh'  

# Output: {'address': 'Dhaka,Bangladesh', 'age': 27, 'name': 'Jahir'}
print(my_dict)

Dictionary থেকে কোনো কিছু remove বা Delete করা

পাইথনে Dictionary থেকে এক বা একাধিক এমনকি পুরো Dictionary ডিলিট বা রিমোভ করে দিতে পারবেন। আর জন্য আছে pop(), popitem(), clear() মেথড । pop() মেথড মূলত একটি নির্দিষ্ট key ধরে যেকোনো আইটেম কে রিমুভ বা রিটার্ন করার জন্য ব্যবহার হয়। আর popitem() দিয়ে random বা arbitrary আইটেম রিমুভ অথবা রিটার্ন করতে পারবেন। আর সব আইটেম একসাথে রিমুভ করার জন্য আপনি clear() Method ব্যবহার করতে পারবেন। এছাড়াও আপনি del কীওয়ার্ড দিয়ে একটি নির্দিষ্ট dictionary item অথবা পুরো dictionary কে Delete করে দিতে পারেন। নিচের উদাহরণ দেখুন :

# create a dictionary
squares = {1:1, 2:4, 3:9, 4:16, 5:25}  

# remove a particular item
# Output: 16
print(squares.pop(4))  

# Output: {1: 1, 2: 4, 3: 9, 5: 25}
print(squares)

# remove an arbitrary item
# Output: (1, 1)
print(squares.popitem())

# Output: {2: 4, 3: 9, 5: 25}
print(squares)

# delete a particular item
del squares[5]  

# Output: {2: 4, 3: 9}
print(squares)

# remove all items
squares.clear()

# Output: {}
print(squares)

# delete the dictionary itself
del squares

# Throws Error
# print(squares)

Python Dictionary Methods

Dictionary নিয়ে বিভিন্ন কাজ করার জন্য Method গুলোর List নিচে বিস্তারিত দেওয়া হলো। যার অনেকগুলোরই বিস্তারিত উপরে আলোচনা হয়েছে।

Python Dictionary Methods
Method Description
clear() Dictionary থেকে সব Item রিমুভ করার জন্য ব্যবহৃত হয়।
copy() Dictionary কে copy করার জন্য ব্যবহৃত হয়।
fromkeys(seq[, v]) নতুন একটি Dictionary তৈরী করবে , যেখানে value গুলো হবে key , এবং প্রত্যেকটি key এর ডিফল্ট value হবে none.
get(key[,d]) Dictionary তে একটি নির্দিষ্ট Key এর বিপরীতে তার value return করবে , আর যদি ঐ key না থাকে, তাহলে none return করবে।
items() Dictionary এর Item গুলোর নতুন view object হিসেবে key value দেখাবে।
keys() Dictionary এর Item গুলোর key দিয়ে একটা নতুন view দেখাবে ।
pop(key[,d]) Dictionary এর একটি নির্দিষ্ট Item এর key সহ remove করা
popitem() Random বা arbitrary আইটেম রিমুভ অথবা রিটার্ন করতে পারবেন
setdefault(key[,d]) Dictionary কোনো নির্দিষ্ট key থাকলে সেটির value কে রিটার্ন করবে , অন্যথায় একটি key ভ্যালু সহ set করবে। .
update([other]) Dictionary কোনো নির্দিষ্ট Item কে update করার কাজে লাগে ।
values() Dictionary এর শুধু value গুলোকে রিটার্ন করবে ।

চলুন উপরে যেইসব Method গুলোর ব্যবহার দেখানো হয়নি সেগুলো সব একসাথে দেখা যাক :

# random sales dictionary
sales = { 'apple': 2, 'orange': 3, 'grapes': 4 }
#dict_values([2, 3, 4])
print(sales.values())

person = {'name': 'Masud Alam', 'age': 22}

age = person.setdefault('age')
#person =  {'age': 22, 'name': 'Masud Alam'}
print('person = ',person)
#Age =  22
print('Age = ',age)

person = {'name': 'Masud Alam', 'age': 22, 'salary': 3500.0}
#dict_keys(['age', 'name', 'salary'])

print(person.keys())

#dict_keys([])
empty_dict = {}
print(empty_dict.keys())

# random sales dictionary
sales = { 'apple': 2, 'orange': 3, 'grapes': 4 }
#dict_items([('apple', 2), ('orange', 3), ('grapes', 4)])
print(sales.items())

# vowels keys
keys = {'a', 'e', 'i', 'o', 'u' }

vowels = dict.fromkeys(keys)
#{'i': None, 'e': None, 'u': None, 'o': None, 'a': None}
print(vowels)


original = {1:'one', 2:'two'}
new = original.copy()
#Orignal:  {1: 'one', 2: 'two'}
print('Orignal: ', original)
#New:  {1: 'one', 2: 'two'}
print('New: ', new)

Python Dictionary Comprehension

একটা iterable List থেকে নতুন একটি Dictionary তে রূপান্তর করার পদ্ধতিকে Dictionary Comprehension বলা হয়। আমরা যদি লিস্ট থেকে একটা ডিকশনারি বানাতে চাই, যেখানে প্রথমটি Key এবং পরেরটি Value তাহলে সাধারণ নিয়মে এভাবে কোড লিখব:

squares = {}
for x in range(6):
   squares[x] = x*x
#{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
 print(squares)

আর এটাকে আমরা Dictionary তে রূপান্তর করার জন্য নিচের মতো code করবো।

squares = {x: x*x for x in range(6)}

# Output: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
print(squares)

এমনকি আমরা dictionary comprehesion এর ভিতরে if ও ব্যবহার করতে পারি।

odd_squares = {x: x*x for x in range(11) if x%2 == 1}

# Output: {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
print(odd_squares)

অন্যান্য dictionary Operations

Dictionary এর ভিতরে কোনো key আছে কিনা তা চেক করার জন্য আমরা in Operator ব্যবহার করতে পারি।

squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}

# Output: True
print(1 in squares)

# Output: True
print(2 not in squares)

# membership tests for key only not value
# Output: False
print(49 in squares)

Dictionary এর ভিতরে প্রত্যেকটি key কে for loop দিয়ে iterate করতে পারি।

squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
for i in squares:
    print(squares[i])

Dictionary এর কিছু Built-in Function List

Dictionary নিয়ে বিভিন্ন কাজ করার জন্য সাধারণ কিছু function নিচে সেগুলোর বিস্তারিত দেওয়া হলো।

Built-in Functions with Dictionary
Function Description
all() Dictionary এর সব element যখন true, তখন এটি true return করবে।
any() Dictionary এর যেকোনো element যখন true, তখন এটি true return করবে।
len() Dictionary এর Length return করবে
sorted() নতুন একটি sorted Dictionary return করবে।
cmp() দুইটি Dictionary Item এর মধ্যে compare করবে।

চলুন নিচে কয়েকটির উদাহরণ দেখা যাক :

squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}

# Output: 5
print(len(squares))

# Output: [1, 3, 5, 7, 9]
print(sorted(squares))

পাইথনে Nested Dictionary কি?

পাইথনে যখন একটি Dictionary এর মধ্যে একাধিক Dictionary থাকে তখন এটাকে Nested Dictionary বলে। চলুন একটা Nested Dictionary তৈরী করা যাক :

people = {1: {'name': 'Borhan', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Nahida', 'age': '22', 'sex': 'Female'}}

print(people)

উপরের কোডটি run করলে নিচের মতো ফলাফল দেখাবে :

{
 1: {'age': '27', 'sex': 'Male', 'name': 'Borhan'}, 
 2: {'age': '22', 'sex': 'Female', 'name': 'Nahida'}
}

ব্যাখ্যা: উপরের প্রোগ্রামে $people হচ্ছে একটা Nested Dictionary, যার মধ্যে আবার index 1 এবং ২ তে দুইটি dictionary add করা হয়েছে।

Nested Dictionary এর Element গুলোতে Access

Nested Dictionary এর Element গুলোতে Access করতে হলে আপনাকে [ ] ব্যবহার করতে হবে, চলুন নিচে উদাহরণ দিয়ে বুঝে নেয়া যাক:

people = {1: {'name': 'Borhan', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Nahida', 'age': '22', 'sex': 'Female'}}

print(people[1]['name'])
print(people[1]['age'])
print(people[1]['sex'])

উপরের কোডটি run করলে নিচের মতো ফলাফল দেখাবে :

Borhan
27
Male

Nested Dictionary তে Element Add অথবা update করা :

Nested Dictionary তে Element Add অথবা update করতে হলে আপনাকে প্রথমে একটা নতুন Dictionary তৈরী করে নিতে হবে, তারপর সেখানে নতুন Element Add করতে পারবেন। চলুন উদাহরণ দিয়ে বুঝে নেয়া যাক :

people = {1: {'name': 'John', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Marie', 'age': '22', 'sex': 'Female'}}

people[3] = {}

people[3]['name'] = 'Farhana'
people[3]['age'] = '24'
people[3]['sex'] = 'Female'
people[3]['married'] = 'No'

print(people[3])

উপরের কোডটি run করলে নিচের মতো ফলাফল দেখাবে :

{'name': 'Farhana', 'age': '24', 'sex': 'Female', 'married': 'No'}

তবে নিচের উদাহরণের মতো করেও Nested Dictionary তে Element Add অথবা update করতে পারবেন :

people = {1: {'name': 'Borhan', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Moumita', 'age': '22', 'sex': 'Female'},
          3: {'name': 'Farhana', 'age': '24', 'sex': 'Female', 'married': 'No'}}

people[4] = {'name': 'Polash', 'age': '29', 'sex': 'Male', 'married': 'Yes'}
print(people[4])

উপরের কোডটি run করলে নিচের মতো ফলাফল দেখাবে :

{'name': 'Peter', 'age': '29', 'sex': 'Male', 'married': 'Yes'}

Nested Dictionary থেকে Element Delete করা

Nested Dictionary থেকে Element Delete করতে হলে আপনাকে del keyword টি ব্যবহার করতে হবে। চলুন উদাহরণ দিয়ে বুঝে নেয়া যাক :

people = {1: {'name': 'Borhan', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Farhana', 'age': '22', 'sex': 'Female'},
          3: {'name': 'Moumita', 'age': '24', 'sex': 'Female', 'married': 'No'},
          4: {'name': 'Polash', 'age': '29', 'sex': 'Male', 'married': 'Yes'}}

del people[3]['married']
del people[4]['married']

print(people[3])
print(people[4])
{'name': 'Moumita', 'age': '24', 'sex': 'Female'}
{'name': 'Polash', 'age': '29', 'sex': 'Male'}

আবার আপনি চাইলে পুরো Dictionary ই Delete করে দিতে পারেন । চলুন উদাহরণ দিয়ে বুঝে নেয়া যাক :

people = {1: {'name': 'Borhan', 'age': '27', 'sex': 'Male'},
          2: {'name': 'Farhana', 'age': '22', 'sex': 'Female'},
          3: {'name': 'Moumita', 'age': '24', 'sex': 'Female'},
          4: {'name': 'Peter', 'age': '29', 'sex': 'Male'}}

del people[3], people[4]
print(people)

উপরের কোডটি run করলে নিচের মতো ফলাফল দেখাবে :

{1: {'name': 'Borhan', 'age': '27', 'sex': 'Male'}, 2: {'name': 'Farhana', 'age': '22', 'sex': 'Female'}}

Nested Dictionary এর মধ্যে Iterate

for loop ব্যবহার করে আপনি Nested Dictionary এর প্রত্যেকটি Element এ iterate করতে পারেন। নিচের উদাহরণ দেখুন :

people = {1: {'Name': 'Jahir', 'Age': '27', 'Sex': 'Male'},
          2: {'Name': 'Moumita', 'Age': '22', 'Sex': 'Female'}}

for p_id, p_info in people.items():
    print("\nPerson ID:", p_id)
    
    for key in p_info:
        print(key + ':', p_info[key])

উপরের কোডটি run করলে নিচের মতো ফলাফল দেখাবে :

Person ID: 1
Name: Jahir
Age: 27
Sex: Male

Person ID: 2
Name: Moumita
Age: 22
Sex: Female
Masud Alam
আমি মাসুদ আলম, বাংলাদেশের ৩৬ তম Zend Certified Engineer । ২০০৯ সালে কম্পিউটার সাইন্স থেকে বেচেলর ডিগ্রী অর্জন করি। দীর্ঘ ৮ বছর আমি Winux Soft, SSL Wireless, IBCS-PRIMAX, Max Group, Canadian International Development Agency (CIDA), Care Bangladesh, World Vision, Hellen Keller সহ বিভিন্ন দেশি বিদেশী কোম্পানিতে ওয়েব ডেভেলপমেন্ট এবং সফটওয়্যার ডেভেলপমেন্ট এর উপর বিভিন্ন লিডিং পজিশন এ চাকরি এবং প্রজেক্ট লিড করি। বিশেষ ভাবে বাংলাদেশের ১০০ জন জেন্ড সার্টিফাইড ইঞ্জিনিয়ার এর মধ্যে ৫২ জন ই আমার হাতে জেন্ড সার্টিফাইড হয়েছে। বর্তমানে TechBeeo Software Company তে সিইও হিসাবে আছি । পাশাপাশি w3programmers ট্রেনিং ইনস্টিটিউট এ PHP এর উপর Professional এবং Advance Zend Certified PHP -7 Engineering কোর্স করাই। আর w3programmers.com সাইট টি আমার।

Leave a Reply