ডিকশনারি#
আমরা ইতিমধ্যে লিস্ট ও টাপল সম্পর্কে জেনেছি। দুটোই পাইথনের স্মার্ট ডেটা টাইপ। কিন্তু ডিকশনারি পাইথনের সবচেয়ে স্মার্ট ডেটা টাইপ। ডিকশনারিকে আমরা লিস্টের সাথে তুলনা করতে পারি। কিন্তু লিস্টের সাথে এর অমিল অনেক। যেমন বলা যায়, ডিকশনারি ডিক্লেয়ার করা হয় {} চিহ্ন দিয়ে। আর ডিকশনারিতে লিস্টের মতো ইনডেক্স থাকে না, তার বদলে থাকে কী। কী হিসেবে স্ট্রিং, ইন্টিজার, টাপল ব্যবহার করা যায়। তবে ['key'] এরকম কিছু ব্যবহার করা যাবে না। লিস্টে যেমন ইনডেক্স নম্বর একটা ভ্যালুকে নির্দেশ করে ঠিক তেমনি করে ডিকশনারিতে একটা কী (Key) একটা ভ্যালুকে নির্দেশ করে। এই ভ্যালুটা স্ট্রিং, ইন্টিজার, ফ্লোট, লিস্ট, টাপল, ডিকশনারি যেকোনো টাইপেরই হতে পারে। ডিকশনারিতে সবগুলো আইটেম কমার (,) মাধ্যমে একে অপর থেকে আলাদা থাকে। প্রতিটা আইটেমে তিনটা অংশ থাকে। প্রথম অংশে থাকে কী, মাঝের অংশে থাকে কোলন চিহ্ন (:) সেপারেটর হিসেবে আর শেষাংশে থাকে ভ্যালু। একটা ডিকশনারির প্রতিটা কী ইউনিক হবে, একটার সাথে অপরটা মিলতে পারবে না। তবে একই ভ্যালু কয়েকবার থাকতে পারে।
>>> a = {}
>>> a
{}
>>> type(a)
<class 'dict'>
>>> a = {'name' : 'MD. Maksudur Rahman Khan', 'nickname' : 'Maateen', 'email' : '[email protected]', 'phone' : '01711223344'}
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'phone': '01711223344'}
>>> type(a)
<class 'dict'>একটা কথা বলতে ভুলে গেছি। a = {} এরকম না করেও আরেকভাবে ডিকশনারি ডিক্লেয়ার করা যায়।
>>> a = dict()
>>> a
{}
>>> type(a)
<class 'dict'>অ্যাক্সেস আইটেম#
লিস্টের মতো করেই ডিকশনারির আইটেম অ্যাক্সেস করা যায়। পার্থক্য হলো, লিস্টের ক্ষেত্রে [] এর ভেতরে ইনডেক্স নম্বর ব্যবহার করতে হয় আর ডিকশনারির ক্ষেত্রে কী ব্যবহার করতে হবে। একটা উদাহরণ দেখা যাক:
>>> a = {'name' : 'MD. Maksudur Rahman Khan', 'nickname' : 'Maateen', 'email' : '[email protected]', 'phone' : '01711223344'}
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'phone': '01711223344'}
>>> a['name']
'MD. Maksudur Rahman Khan'
>>> a['nickname']
'Maateen'
>>> a['email']
'[email protected]'
>>> a['phone']
'01711223344'আপডেট ডিকশনারি#
ডিকশনারির কোনো আইটেমকে আপডেট করা খুবই সহজ কাজ। শুধু ঐ কী-তে নতুন ডেটা অ্যাসাইন করলেই চলে। যেমন:
>>> a = {'name' : 'MD. Maksudur Rahman Khan', 'nickname' : 'Maateen', 'email' : '[email protected]', 'phone' : '01711223344'}
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'phone': '01711223344'}
>>> a['name'] = 'Muhammad Maksudur Rahman Khan'
>>> a
{'name': 'Muhammad Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'phone': '01711223344'}একেবারে নতুন একটা আইটেম যোগ করতে চাইলে নতুন একটা কী-ভ্যালু পেয়ার যোগ করলেই হয়। যেমন:
>>> a = {'name' : 'MD. Maksudur Rahman Khan', 'nickname' : 'Maateen', 'email' : '[email protected]', 'phone' : '01711223344'}
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'phone': '01711223344'}
>>> a['hometown'] = 'Barisal'
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'hometown': 'Barisal', 'phone': '01711223344'}আচ্ছা, যদি কখনো একটা ডিকশনারির সব আইটেমকে অন্য একটা ডিকশনারিতে যোগ করার দরকার পড়ে? তখন আমরা update() ফাংশনটা ব্যবহার করব। যে ডিকশনারিটা যোগ করব সেটা এর ভেতরে দিয়ে দিলেই কেল্লাফতে।
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'phone': '01711223344'}
>>> b = {'hometown' : 'Barisal', 'fav_poet' : 'Nazrul'}
>>> a.update(b)
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'fav_poet': 'Nazrul', 'nickname': 'Maateen', 'email': '[email protected]', 'hometown': 'Barisal', 'phone': '01711223344'}আশা করি বুঝেছি সবাই।
রিমুভ আইটেম, ডিকশনারি#
ডিকশনারি থেকে একটা আইটেমকে রিমুভ করার জন্য আমরা del স্টেটমেন্টকে ব্যবহার করতে পারি।
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'hometown': 'Barisal', 'phone': '01711223344'}
>>> del a['phone']
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'hometown': 'Barisal'}যদি একটা ডিকশনারির সবগুলো আইটেমকে এক ঝটকায় রিমুভ করে ফেলতে চাই তখন clear() ফাংশনটা কাজের জিনিস।
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'hometown': 'Barisal'}
>>> a.clear()
>>> a
{}আর যদি গোটা ডিকশনারি সমেত সব খাইয়া দিতে চাই? তাহলেও সেই del স্টেটমেন্টের প্রয়োগ বাঞ্ছনীয়।
>>> a = {'name' : 'MD. Maksudur Rahman Khan', 'nickname' : 'Maateen', 'email' : '[email protected]', 'phone' : '01711223344'}
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'phone': '01711223344'}
>>> del a
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not definedপুরো ডিকশনারিটা খাইয়া দেওয়ার কারণে পাইথন NameError থ্রো করেছে। বলছে যে আমরা নাকি a নামে কোনো ডিকশনারি ভেরিয়েবল ডিফাইনই করিনি। হা হা হা!
আছে নাকি নাই?#
কোনো ডিকশনারিতে কোনো নির্দিষ্ট কী আছে কিনা সেটা পরীক্ষা করার জন্য আমরা in অপারেটর ব্যবহার করতে পারি। কী-টা থাকলে True রিটার্ন করবে, না থাকলে False রিটার্ন করবে।
পাইথন-২ এ
has_key()নামে একটা ফাংশন ছিল যেটা এই কাজ করত। পাইথন-৩ এ সেটা বাদ দিয়ে দেওয়া হয়েছে। এখনinঅপারেটরই ব্যবহার করতে হয়।
>>> a = {'name' : 'MD. Maksudur Rahman Khan', 'nickname' : 'Maateen', 'email' : '[email protected]', 'phone' : '01711223344'}
>>> 'name' in a
True
>>> 'home' in a
Falseকিছু ফাংশনের (মেথড) প্রয়োগ#
copy()#
এই ফাংশনটা কোনো ডিকশনারির একটা পূর্ণাঙ্গ কপি রিটার্ন করে।
>>> a = {'name' : 'MD. Maksudur Rahman Khan', 'nickname' : 'Maateen', 'email' : '[email protected]', 'phone' : '01711223344'}
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'phone': '01711223344'}
>>> a.copy()
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'phone': '01711223344'}get(key, default=None)#
এই ফাংশনটা মূলত ডিকশনারিতে কোনো কী সার্চ করে সেটার ভ্যালু পাওয়ার জন্য ব্যবহার করা হয়। যদি কীটা ডিকশনারিতে না থাকে তবে একটা ডিফল্ট ভ্যালু রিটার্ন করবে। প্রাথমিকভাবে এই ভ্যালুটা হলো None মানে কিছুই না, তবে আমরা চাইলে এটাকে পরিবর্তন করে দিতে পারি।
>>> a = {'name' : 'MD. Maksudur Rahman Khan', 'nickname' : 'Maateen', 'email' : '[email protected]', 'phone' : '01711223344'}
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'phone': '01711223344'}
>>> a.get('name')
'MD. Maksudur Rahman Khan'
>>> a.get('home')
>>> a.get('home', 'kicu nai')
'kicu nai'items()#
এই ফাংশনটা একটা ডিকশনারিকে dict_items অবজেক্ট হিসেবে রিটার্ন করে। এর ভেতরে প্রতিটা আইটেম টাপল হিসেবে থাকে। প্রতিটা টাপলের 0 নম্বর ইনডেক্সে থাকে কী আর 1 নম্বর ইনডেক্সে থাকে ভ্যালু।
>>> a = {'name' : 'MD. Maksudur Rahman Khan', 'nickname' : 'Maateen', 'email' : '[email protected]', 'phone' : '01711223344'}
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'phone': '01711223344'}
>>> a.items()
dict_items([('name', 'MD. Maksudur Rahman Khan'), ('nickname', 'Maateen'), ('email', '[email protected]'), ('phone', '01711223344')])keys()#
এই ফাংশনটা একটা ডিকশনারির সবগুলো কী dict_keys অবজেক্ট হিসেবে রিটার্ন করে।
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'phone': '01711223344'}
>>> a.keys()
dict_keys(['name', 'nickname', 'email', 'phone'])values()#
এই ফাংশনটা একটা ডিকশনারির সবগুলো ভ্যালু dict_values অবজেক্ট হিসেবে রিটার্ন করে।
>>> a
{'name': 'MD. Maksudur Rahman Khan', 'nickname': 'Maateen', 'email': '[email protected]', 'phone': '01711223344'}
>>> a.values()
dict_values(['MD. Maksudur Rahman Khan', 'Maateen', '[email protected]', '01711223344'])এই পর্যন্তই থাক। অনেক তো হলো। এবার প্র্যাকটিস করার পালা।