সমস্যা বিবরণ
টাপলের লিস্ট দেওয়া থাকে। টপ K ফ্রিকোয়েন্ট এলিমেন্ট (ভ্যালু অনুযায়ী) বের করুন।
উদাহরণ
listA = [[('Mon',126)],[('Tue',768)],[('Wed',512)],[('Thu',13)],[('Fri',341)]], K=3 → আউটপুট: [('Tue',768),('Wed',512),('Fri',341)]
পদ্ধতি ১: defaultdict + sorted
import collections
from operator import itemgetter
from itertools import chain
listA = [[('Mon',126)],[('Tue',768)],[('Wed',512)],[('Thu',13)],[('Fri',341)]]
K = 3
new_list = list(chain.from_iterable(listA))
dict_ = collections.defaultdict(list)
for k, v in new_list:
dict_[k].append(v)
res = {k: sum(v) for k, v in dict_.items()}
res = sorted(res.items(), key=itemgetter(1), reverse=True)[:K]
print(res) # [('Tue', 768), ('Wed', 512), ('Fri', 341)]
পদ্ধতি ২: chain + sorted + itemgetter (সরল)
from operator import itemgetter
from itertools import chain
listA = [[('Mon',126)],[('Tue',768)],[('Wed',512)],[('Thu',13)],[('Fri',341)]]
K = 3
res = sorted(chain.from_iterable(listA), key=itemgetter(1), reverse=True)[:K]
print(res) # [('Tue', 768), ('Wed', 512), ('Fri', 341)]
ব্যাখ্যা
- পদ্ধতি ১: একই কীवाले ভ্যালু সম করে (aggregate) টপ K বের করে।
- পদ্ধতি ২: সরাসরি টাপলগুলো সর্ট করে টপ K নেয় (এগিগ্রেট করে না)।
- প্রয়োজন অনুযায়ী পদ্ধতি বেছে নিন।
আউটপুট
[('Tue', 768), ('Wed', 512), ('Fri', 341)]