একটি পাইথন নেস্টেড ডিকশনারি হলো একটি ডিকশনারির ভিতর আরেকটি ডিকশনারি। এটি আপনাকে কী-ভ্যালু ম্যাপিং স্ট্রাকচার ব্যবহার করে একটি এক্সিস্টিং ডিকশনারির ভিতরে ডেটা সংরক্ষণ করতে দেয়।
পাইথনে ডিকশনারি নিয়ে কাজ করার সময়, আপনি এমন পরিস্থিতি সম্মুখীন होতে পারেন যেখানে একটি ডিকশনারি আরেকটি ডিকশনারি ধারণ করে।
ডেটার এই স্ট্রাকচারকে প্রায়শই নেস্টেড ডিকশনারি বলা হয়, এবং পাইথন কোডে এর vielfältige প্রয়োগ রয়েছে।
এই টিউটোরিয়ালে পাইথন নেস্টেড ডিকশনারির বেসিকস আলোচনা করা হবে। আমরা কিছু উদাহরণের মাধ্যমে যাবো যাতে আপনি শিখতে পারেন কীভাবে একটি নেস্টেড ডিকশনারি তৈরি এবং মডিফাই করবেন।
পাইথন ডিকশনারি রিফ্রেশার
ডিকশনারি হলো পাইথনের ম্যাপিং ডেটা টাইপ। একটি পাইথন ডিকশনারি কীগুলোকে মানের সাথে বাইন্ড বা ম্যাপ করে, এবং ডেটা সংরক্ষণের একটি কার্যকর উপায় প্রদান করে।
যখন একটি কী একটি মানের সাথে ম্যাপ করা হয়, তবে আপনি সেই কী রেফারেন্স করে সেই মানেযে সংরক্ষিত ডেটা বের করতে পারেন। তাই, একে Sinne, কীটি একটি লেবেলের মতো কাজ করে। একটি লোকাল আইস كрем স্টোর, The Frozen Spoon-এ বিক্রি হওয়া আইস কрем ফ্লেভারদের দাম সংরক্ষণ করা একটি ডিকশনারির উদাহরণ নিচে:
ice_cream_flavors = {
"Vanilla": 0.50,
"Chocolate": 0.50,
"Cookies and Cream": 0.75,
"Strawberry": 0.65,
"Buttered Pecan": 0.90
}
এই ডিকশনারির কীগুলো হলো আমাদের আইস কремের নাম (যেমন "Vanilla"), এবং মানগুলো হলো প্রতিটি আইস কремের প্রতি স্কুপের দাম।
পাইথন নেস্টেড ডিকশনারি
পাইথন নেস্টেড ডিকশনারিগুলো হলো একটি ডিকশনারির ভিতর ডিকশনারি। এগুলো একটি ডিকশনারির ভিতরে ডিকশনারি ডেটা রিপ্রেজেন্ট করতে ব্যবহৃত হয়। আপনি একটি ডিকশনারির ভিতরে যত ইচ্ছে তত ডিকশনারি নেস্ট করতে পারেন।
নেস্টেড ডিকশনারি উপযোগী যদি আপনি একাধিক কম্পোনেন্ট ডিকশনারি একটি বড় ডিকশনারিতে সংরক্ষণ করতে চান।
চলুন একটি উদাহরণের মাধ্যমে নেস্টেড ডিকশনারি কীভাবে কাজ করে তা ইলাস্ট্রেট করি। ধরুন আমরা একটি ডিকশনারি তৈরি করতে চাই যা The Frozen Spoon-এ বিক্রি হওয়া প্রতিটি আইস কрем ফ্লেভার সম্পর্কে ডিকশনারি সংরক্ষণ করবে। প্রতিটি ডিকশনারি আমাদের বড় ডিকশনারিতে লিস্ট করবে:
- আইস কремের নাম
- তার দাম
- কতটি পিন্ট স্টকে রয়েছে
এই ডেটা সংরক্ষণ করা একটি নেস্টেড ডিকশনারি কীভাবে দেখাবে তা নিচে:
ice_cream_flavors = {
0: {
"flavor": "Vanilla",
"price": 0.50,
"pints": 20
},
1: {
"flavor": "Chocolate",
"price": 0.50,
"pints": 31
},
2: {
"flavor": "Cookies and Cream",
"price": 0.75,
"pints": 14
}
}
আমাদের কোডে, আমরা ice_cream_flavors নামে একটি বড় ডিকশনারি ঘোষণা করেছি। এই ডিকশনারিতে তিনটি ডিকশনারি রয়েছে, যesezбелো একটি নির্দিষ্ট আইস কрем ফ্লেভার সম্পর্কে ইনফরমেশন সংরক্ষণ করে।
আমরা যদি নেস্টেড ডিকশনারি ব্যবহার না করতাম, তবে আমাদের এই ডিকশনারিগুলো আলাদা আলাদা ভেরিয়েবলে সংরক্ষণ করতে হতো। এটা কাউন্টারইন্টিউইটিভ কারণ প্রতিটি ডিকশনারি আইস কрем ফ্লেভার সম্পর্কে ইনফরমেশন সংরক্ষণ করে।
নেস্টেড ডিকশনারিতে আইটেম এক্সেস করা
একটি নেস্টেড ডিকশনারিতে একটি আইটেম এক্সেস করতে, আমরা ইনডেক্সিং সিনট্যাক্স ব্যবহার করতে পারি।
মান লেন আমরা আমাদের ডিকশনারিতে ইনডেক্স মান ০ থাকা আইস কремের দাম বের করতে চাই। আমরা নিচের কোড ব্যবহার করে সেটি করতে পারি:
ice_cream_flavors = {
0: {
"flavor": "Vanilla",
"price": 0.50,
"pints": 20
},
1: {
"flavor": "Chocolate",
"price": 0.50,
"pints": 31
},
2: {
"flavor": "Cookies and Cream",
"price": 0.75,
"pints": 14
}
}
print(ice_cream_flavors[0]["price"])
print(ice_cream_flavors[0]["flavor"])
আমাদের কোড ফেরত দেয়:
0.50 Vanilla
এই কোডে, আমরা প্রথমে আমাদের বড় ডিকশনারিতে সেই আইটেম কী নির্দিষ্ট করি যার মান আমরা বের করতে চাই। এই কেসে, আমরা ইনডেক্স মান ০ থাকা রেকর্ড এক্সেস করতে চেয়েছিলাম।
তারপর, আমরা আমাদের ইনার ডিকশনারিতে সেই আইটেমের নাম নির্দিষ্ট করি যা আমরা বের করতে চাই। এই কেসে, আমরা আমাদের আইস কремের দাম এবং ফ্লেভার বের করতে চেয়েছিলাম। তাই, আমরা আমাদের দুটি print() স্টেটমেন্টে price এবং flavor নির্দিষ্ট করেছি।
নেস্টেড ডিকশনারি পাইথন: এলিমেন্ট যোগ করা
একটি নেস্টেড ডিকশনারিতে এলিমেন্ট যোগ করতে, আমরা সেই সিনট্যাক্স ব্যবহার করতে পারি যা আমরা একটি আইটেম মডিফাই করতে ব্যবহার করেছি। একটি নেস্টেড ডিকশনারিতে আইটেম যোগ করার জন্য কোনো মেথড নেই। আপনাকে অ্যাসাইনমেন্ট অপারেটর ব্যবহার করতে হবে।
এলিমেন্ট যোগ করার সিনট্যাক্স নিম্নরূপ:
dictionary_name[new_key_name] = new_value
মান লেন আমাদের কাছে একটি ডিকশনারি রয়েছে যা একটি ভানিলা আইস ক্রমের ইনফরমেশন সংরক্ষণ করে। আমরা ট্র্যাক করতে চাই কি আইস ক্রমে কোনো ডিসকাউন্ট আছে। আমরা নিচের কোড ব্যবহার করে সেটি করতে পারি:
ice_cream_flavors = {
0: {
"flavor": "Vanilla",
"price": 0.50,
"pints": 20
},
1: {
"flavor": "Chocolate",
"price": 0.50,
"pints": 31
},
2: {
"flavor": "Cookies and Cream",
"price": 0.75,
"pints": 14
}
}
ice_cream_flavors[0]["discount"] = True
print(ice_cream_flavors[0])
আমাদের কোড রান করি এবং দেখি কী হয়:
{'flavor': 'Vanilla', 'price': 0.5, 'pints': 20, 'discount': True}
আমাদের ডিকশনারি পাইথন ভেরিয়েবল "ice_cream_flavors"-এ সংরক্ষিত।
আমরা একটি কী নামক discount ডিকশনারিতে যোগ করেছি। এই কী-এর ইনডেক্স পজিশন ০। আমরা এই কী-এর মান True সেট করেছি। তারপর, আমরা আমাদের ice_cream_flavors নেস্টেড ডিকশনারিতে ইনডেক্স মান ০ থাকা ডিকশনারি প্রিন্ট করেছি। এটা দেখায় যে আমাদের discount কীটি যোগ হয়েছে।
আমরা এই সিনট্যাক্স ব্যবহার করতে পারি একটি এক্সিস্টিং ডিকশনারিতে এলিমেন্ট আপডেট করতে। মান লেন আমরা আমাদের চকলেট আইস কремের দাম $0.45 প্রতি স্কুপ করতে চাই। আমরা নিচের কোড ব্যবহার করে সেটি করতে পারি:
ice_cream_flavors = {
0: {
"flavor": "Vanilla",
"price": 0.50,
"pints": 20
},
1: {
"flavor": "Chocolate",
"price": 0.50,
"pints": 31
},
2: {
"flavor": "Cookies and Cream",
"price": 0.75,
"pints": 14
}
}
ice_cream_flavors[1]["price"] = 0.45
print(ice_cream_flavors[1])
আমাদের কোড ফেরত দেয়:
{'flavor': 'Chocolate', 'price': 0.45, 'pints': 31}
আমরা আমাদের চকলেট আইস কремের price কী-এর মান $0.45 করে পরিবর্তন করেছি।
এটা করার জন্য, আমরা সেটি ডিকশনারির ইনডেক্স মান ১ হিসেবে নির্দিষ্ট করেছি যেটির price মান আমরা পরিবর্তন করতে চাই। এই মান আমাদের ডিকশনারিতে চকলেট আইস কریم সম্পর্কে ইনফরমেশন ধারণ করে। তারপর, আমরা price কী-এ একটি নতুন মান অ্যাসাইন করেছি।
নেস্টেড ডিকশনারি পাইথন: এলিমেন্ট ডিলিট করা
একটি নেস্টেড ডিকশনারিতে সংরক্ষিত একটি আইটেম ডিলিট করতে, আমরা del স্টেটমেন্ট ব্যবহার করতে পারি। del স্টেটমেন্ট আপনাকে একটি অবজেক্ট ডিলিট করতে দেয়। del পাইথন ব্রেক স্টেটমেন্টের মতো লেখা হয়, তার নিজস্ব লাইনে, তারপর ডিকশনারিতে যেই আইটেমটি আপনি ডিলিট করতে চান সেটি।
মান লেন আমরা অস্থায়ীভাবে আমাদের স্টোরে কুকিজ অ্যান্ড কریم আইস ক্রম অফার করছি না। আমাদের কুকিজ অ্যান্ড কریم আইস ক্রম সংরক্ষণকারী ফ্রিজার কাজ করা বন্ধ করল এবং পণ্যগুলো গলিয়ে গেল।
আমরা নিচের কোড ব্যবহার করে এই আইস কремকে আমাদের নেস্টেড ডিকশনারি থেকে সরাতে পারি:
ice_cream_flavors = {
0: {
"flavor": "Vanilla",
"price": 0.50,
"pints": 20
},
1: {
"flavor": "Chocolate",
"price": 0.50,
"pints": 31
},
2: {
"flavor": "Cookies and Cream",
"price": 0.75,
"pints": 14
}
}
del ice_cream_flavors[2]
print(ice_cream_flavors)
আমাদের কোড ফেরত দেয়:
{0: {'flavor': 'Vanilla', 'price': 0.5, 'pints': 20}, 1: {'flavor': 'Chocolate', 'price': 0.5, 'pints': 31}}
আমাদের কোডে, আমরা একটি del স্টেটমেন্ট ব্যবহার করেছি আমাদের নেস্টেড ডিকশনারিতে সেই মান ডিলিট করতে যার কী ২-এর সমান। আপনি দেখতে পাচ্ছেন, এটা আমাদের নেস্টেড ডিকশনারি থেকে Cookies and Cream-এর এন্ট্রি সরিয়ে দিয়েছে।
পাইথন নেস্টেড ডিকশনারি এর মাধ্যমে ইটারেট করা
এখন, মান লেন আমরা আমাদের নেস্টেড ডিকশনারির প্রতিটি ডিকশনারির কন্টেন্ট কনসোলে প্রিন্ট করতে চাই। এই টাস্ক কীভাবে সম্পন্ন করব?
এটা একটি চমৎকার প্রশ্ন। আমাদের নেস্টেড ডিকশনারির কন্টেন্ট প্রিন্ট করতে, আমরা এটিকে একটি পাইথন for লুপ ব্যবহার করে ইটারেট করতে পারি। আমরা পাইথন ডিকশনারি items() মেথডও ব্যবহার করব আমাদের ডিকশনারির কী এবং ভ্যালুর তালিকা বের করতে:
ice_cream_flavors = {
0: {
"flavor": "Vanilla",
"price": 0.50,
"pints": 20
},
1: {
"flavor": "Chocolate",
"price": 0.50,
"pints": 31
},
2: {
"flavor": "Cookies and Cream",
"price": 0.75,
"pints": 14
}
}
for key, value in ice_cream_flavors.items():
print("Ice Cream:", key)
for k, v in value.items():
print(k + ":", value[k])
আমাদের কোড ফেরত দেয়:
Ice Cream: 0 flavor: Vanilla price: 0.5 pints: 20 Ice Cream: 1 flavor: Chocolate price: 0.5 pints: 31 Ice Cream: 2 flavor: Cookies and Cream price: 0.75 pints: 14
আমাদের কোড ব্রেক ডাউন করি। প্রথমে, আমরা আমাদের আইস কрем ফ্লেভার নেস্টেড ডিকশনারি সংজ্ঞায়িত করেছি।
তারপর, আমরা একটি for লুপ সংজ্ঞায়িত করেছি যা ice_cream_flavors ডিকশনারির প্রতিটি কী এবং ভ্যালুর মধ্য দিয়ে যায়। এই লুপ .items() ব্যবহার করে আমাদের ice_cream_flavors ডিকশনারির সকল কী এবং ভ্যালুর একটি তালিকা জেনারেট করে, যার ওপর লুপটি ইটেরেট করতে পারে।
তারপর, আমরা Ice Cream: প্রিন্ট করি যেটি একটি নির্দিষ্ট আইস কремের সাথে যুক্ত কী দ্বারা ফলো করা হয়।
পরবর্তীতে, আমরা আরেকটি for লুপ ব্যবহার করি আমাদের নেস্টেড ডিকশনারির প্রতিটি value-এ থাকা সকল আইটেমের মধ্য দিয়ে লুপ চালাতে। এটি আমাদের নেস্টেড ডিকশনারির প্রতিটি ইনার এন্ট্রিকে রেফার করে (যেমন ভানিলা এবং চকলেটের জন্য)। এই লুপ আমাদের ইনার ডিকশনারির প্রতিটি কী-এর নাম প্রিন্ট করে, তারপর একটি কোলন, তারপর সেই কী-এর সাথে যুক্ত মান।
উপসংহার
নেস্টেড ডিকশনারি আপনাকে পাইথনে একটি ডিকশনারির ভিতরে ডিকশনারি সংরক্ষণ করতে দেয়।
এই টিউটোরিয়ালে, উদাহরণের রেফারেন্সে, কীভাবে:
- একটি নেস্টেড ডিকশনারি তৈরি করবেন
- একটি নেস্টেড ডিকশনারিতে এলিমেন্ট যোগ করবেন এবং আপডেট করবেন
- একটি নেস্টেড ডিকশনারি থেকে এলিমেন্ট সরাবেন
- একটি নেস্টেড ডিকশনারির মাধ্যমে ইটারেট করবেন
পাইথনে কোডিং সম্পর্কে আরও জানতে, আমাদের How to Code in Python গাইড পড়ুন।