কম্পিউটার

পাইথনে অভিধানের সাথে গণনা কীভাবে করবেন?


সমস্যা

আপনি ডেটার অভিধানে বিভিন্ন গণনা (যেমন, সর্বনিম্ন মান, সর্বোচ্চ মান, বাছাই, ইত্যাদি) করতে চান৷

সমাধান।

আমরা টেনিস খেলোয়াড় এবং তাদের গ্র্যান্ডস্লাম শিরোনাম নিয়ে একটি অভিধান তৈরি করব।

PlayerTitles = {
   'Federer': 20,
   'Nadal': 20,
   'Djokovic': 17,
   'Murray': 3,
   'Theim' : 1,
   'Zverev': 0
}

1.আমাদের কাছে খেলোয়াড়ের নাম এবং প্রতিটি খেলোয়াড়ের জিতে নেওয়া গ্র্যান্ডস্লাম শিরোনাম সহ একটি অভিধান রয়েছে। এখন আসুন আমরা অন্তত সংখ্যক শিরোনাম সহ প্লেয়ার খুঁজে বের করার চেষ্টা করি

#type(PlayerTitles)
print(f"Output \n*** The minimum value in the dictionary is {min(PlayerTitles)} ")

আউটপুট

*** The minimum value in the dictionary is Djokovic

2. এটি সম্ভবত আমরা যা চাই তা নয় কারণ আমরা আসলে অভিধানের মান জড়িত একটি গণনা করার চেষ্টা করছি। তাই আসুন আমরা একটি অভিধানের মান() পদ্ধতি ব্যবহার করে এটি ঠিক করার চেষ্টা করি।

print(f"Output \n*** The minimum value in the dictionary is {min(PlayerTitles.values())} ")

আউটপুট

*** The minimum value in the dictionary is 0

3. দুর্ভাগ্যবশত, এটি প্রায়শই আপনি যা চান তা হয় না। উদাহরণস্বরূপ, আপনি সংশ্লিষ্ট কীগুলি সম্পর্কে তথ্য জানতে চাইতে পারেন, যেমন অন্তত সংখ্যক শিরোনাম সহ প্লেয়ারের নাম৷

4. আপনি min() এবং max() এ একটি কী ফাংশন সরবরাহ করলে আপনি ন্যূনতম বা সর্বোচ্চ মানের সাথে সম্পর্কিত কী পেতে পারেন৷

print(f"Output \n***{min(PlayerTitles, key=lambda k: PlayerTitles[k])} ")

আউটপুট

***Zverev

5. যাইহোক, ন্যূনতম মান পেতে, আপনাকে একটি অতিরিক্ত লুকআপ করতে হবে৷

min_titles = PlayerTitles[min(PlayerTitles, key=lambda k: PlayerTitles[k])]
print(f"Output \n***{min_titles} ")

আউটপুট

***0

6. zip() এর সাথে জড়িত সমাধানটি অভিধানটিকে (মান, কী) জোড়ার ক্রমানুসারে "উল্টিয়ে" দিয়ে সমস্যার সমাধান করে। এই ধরনের টিপলে তুলনা করার সময়, মানের উপাদানটি প্রথমে তুলনা করা হয়, তারপরে কী।

এটি আমাদেরকে ঠিক সেই আচরণ দেয় যা আমরা চাই এবং একটি একক বিবৃতি ব্যবহার করে অভিধান বিষয়বস্তুতে হ্রাস এবং বাছাই সহজে সম্পাদন করার অনুমতি দেয়৷

min_titles = min(zip(PlayerTitles.values(), PlayerTitles.keys()))
max_titles = max(zip(PlayerTitles.values(), PlayerTitles.keys()))

print(f"Output \n***{min_titles , max_titles} ")

আউটপুট

***((0, 'Zverev'), (20, 'Nadal'))

7. একইভাবে, ডেটা র‍্যাঙ্ক করতে, zip() ব্যবহার করুন sorted()

titles_sorted = sorted(zip(PlayerTitles.values(), PlayerTitles.keys()))
print(f"Output \n***{titles_sorted} ")

আউটপুট

***[(0, 'Zverev'), (1, 'Theim'), (3, 'Murray'), (17, 'Djokovic'), (20, 'Federer'), (20, 'Nadal')]

8. এই গণনাগুলি করার সময়, জেনে রাখুন যে zip() একটি পুনরাবৃত্তিকারী তৈরি করে যা শুধুমাত্র একবার ব্যবহার করা যেতে পারে৷

titles_and_players = zip(PlayerTitles.values(), PlayerTitles.keys())
print(f"Output \n***{min(titles_and_players)} ")

আউটপুট

***(0, 'Zverev')

9. যদি আমরা এটিকে আবার কল করার চেষ্টা করি, তাহলে খালি ক্রম হিসাবে আমরা একটি ব্যতিক্রমের সম্মুখীন হব৷

10. এটা উল্লেখ করা উচিত যে (মান, কী) জোড়া যুক্ত গণনার ক্ষেত্রে, একাধিক এন্ট্রির একই মান থাকা ক্ষেত্রে ফলাফল নির্ধারণ করতে কী ব্যবহার করা হবে।

উদাহরণস্বরূপ, min() এবং max() এর মতো গণনায়, যদি ডুপ্লিকেট মান থাকে তাহলে সবচেয়ে ছোট বা বৃহত্তম কী সহ এন্ট্রিটি ফেরত দেওয়া হবে। এই কারণেই যখন আমরা সর্বোচ্চ খেতাবপ্রাপ্ত খেলোয়াড়দের জন্য বেছে নিই, তখন আমরা কেবলমাত্র একটি মান দিয়ে থাকি যা নাদাল। (ধাপ 7 আউটপুট দেখুন)।


  1. Python Pandas - কিভাবে মিনিটে ফ্রিকোয়েন্সি সহ DateTimeIndex-এ সিল অপারেশন করা যায়

  2. Python Pandas - কিভাবে প্রতি ঘণ্টার ফ্রিকোয়েন্সি সহ DateTimeIndex-এ সিল অপারেশন করতে হয়

  3. Python Pandas - মাইক্রোসেকেন্ড ফ্রিকোয়েন্সি সহ DateTimeIndex-এ কিভাবে ফ্লোর অপারেশন করা যায়

  4. বোকেহ (পাইথন) এর চিত্রগুলির সাথে কীভাবে কাজ করবেন?