সমস্যা বিবরণ
একটি লিস্টে প্রতিটি এলিমেন্ট কতবার আসেছে তা গণনা করে ডিকশনারি আকারে রিটার্ন করতে হবে।
উদাহরণ
Input: ['A', 'A', 'B', 'C', 'B', 'D', 'D', 'A', 'B']
Output: {'A': 3, 'B': 3, 'C': 1, 'D': 2}
পদ্ধতি ১: ম্যানুয়াল ডিকশনারি (শেখার জন্য ভালো)
random_list = ['A', 'A', 'B', 'C', 'B', 'D', 'D', 'A', 'B']
frequency = {}
for item in random_list:
if item in frequency:
frequency[item] += 1
else:
frequency[item] = 1
print(frequency) # {'A': 3, 'B': 3, 'C': 1, 'D': 2}
পদ্ধতি ২: collections.Counter (স্ট্যান্ডার্ড ও দক্ষ)
import collections
random_list = ['A', 'A', 'B', 'C', 'B', 'D', 'D', 'A', 'B']
frequency = collections.Counter(random_list)
print(dict(frequency)) # {'A': 3, 'B': 3, 'C': 1, 'D': 2}
Counter এর অতিরিক্ত ফিচার
from collections import Counter
cnt = Counter(['A', 'A', 'B', 'C', 'B', 'D', 'D', 'A', 'B'])
print(cnt.most_common(2)) # [('A', 3), ('B', 3)] - টপ ২
print(cnt['A']) # 3 - ডিকশনারি লাইক অ্যাক্সেস
print(sum(cnt.values())) # 9 - টোটাল এলিমেন্ট
print(list(cnt.elements())) # ['A','A','A','B','B','B','C','D','D'] - এক্সপ্যান্ডেড
পদ্ধতি ৩: defaultdict (ক্লিনার কোড)
from collections import defaultdict
random_list = ['A', 'A', 'B', 'C', 'B', 'D', 'D', 'A', 'B']
frequency = defaultdict(int)
for item in random_list:
frequency[item] += 1 # অটোমেটিক ০ থেকে শুরু
print(dict(frequency))
তুলনা
| পদ্ধতি | কোড লেন্থ | পারফরম্যান্স | এক্সট্রা ফিচার |
|---|---|---|---|
| Manual dict | লম্বা | বেসলাইন | না |
| Counter | সর্বোচ্চ ছোট | অপ্টিমাইজড (C) | হ্যাঁ (most_common ইত্যাদি) |
| defaultdict | মidium | দ্রুত | সাধারণ ডিক্ট অপারেশন |
উপসংহার
- প্রোডাকশন কোডে **collections.Counter** ব্যবহার করুন — স্ট্যান্ডার্ড, দক্ষ, ফিচার-রিচ
- শেখার উদ্দেশ্যে ম্যানুয়াল ডিকশনারি বুঝতে পারেন
defaultdictজেনারেল পρφপজ ডিকশনারি ডিফল্ট ভ্যালুয়ের জন্য ভালো