জিনিসগুলি সংগঠিত করার এটি একটি খুব অদ্ভুত উপায়। আপনি যদি কোনও অভিধানে সঞ্চয় করেন তবে এটি সহজ:
# This example should work in any version of Python.
# urls_d will contain URL keys, with counts as values, like: {'http://www.google.fr/' : 1 }
urls_d = {}
for url in list_of_urls:
if not url in urls_d:
urls_d[url] = 1
else:
urls_d[url] += 1
গুনের একটি অভিধান আপডেট করার জন্য এই কোডটি পাইথনের সাধারণ "প্যাটার্ন"। এটি এত সাধারণ যে একটি বিশেষ ডেটা কাঠামো রয়েছে, defaultdict
এটি আরও সহজ করার জন্য তৈরি করা হয়েছে:
from collections import defaultdict # available in Python 2.5 and newer
urls_d = defaultdict(int)
for url in list_of_urls:
urls_d[url] += 1
আপনি যদি defaultdict
কোনও কী ব্যবহার করে অ্যাক্সেস করেন এবং কীটি ইতিমধ্যে এর মধ্যে নেই defaultdict
, কীটি স্বয়ংক্রিয়ভাবে একটি ডিফল্ট মান সহ যুক্ত হয়। defaultdict
Callable লাগে আপনি পাস, এবং ডিফল্ট মান পেতে এটা কল। এই ক্ষেত্রে, আমরা ক্লাসে পাস করেছি int
; পাইথন যখন int()
এটি কল করে তখন এটি একটি শূন্য মান দেয়। সুতরাং, আপনি প্রথমবার কোনও ইউআরএল রেফারেন্স করলে তার গণনা শূন্যে শুরু হয় এবং তারপরে আপনি একটিতে গণনা যুক্ত করেন।
তবে গণনাগুলিতে পরিপূর্ণ একটি অভিধানও একটি সাধারণ প্যাটার্ন, সুতরাং পাইথন একটি ব্যবহারের জন্য প্রস্তুত ক্লাস সরবরাহ করে: containers.Counter
আপনি কেবল Counter
ক্লাসে কল করে কোনও উদাহরণ তৈরি করেন, কোনও পুনরাবৃত্তিযোগ্য স্থানে চলে যাওয়া; এটি এমন একটি অভিধান তৈরি করে যেখানে কীগুলি পুনরাবৃত্তযোগ্য থেকে মানগুলি হয় এবং মানগুলি কতবার পুনরাবৃত্তীয়গুলিতে কী উপস্থিত হয়েছিল তা গণনা করা হয়। উপরের উদাহরণটি তখন পরিণত হয়:
from collections import Counter # available in Python 2.7 and newer
urls_d = Counter(list_of_urls)
আপনি যদি দেখিয়েছিলেন এমনভাবেই যদি আপনার সত্যিই প্রয়োজন হয় তবে সবচেয়ে সহজ এবং দ্রুততম উপায় হ'ল এই তিনটি উদাহরণের যে কোনও একটি ব্যবহার করুন এবং তারপরে আপনার যা প্রয়োজন তা তৈরি করুন।
from collections import defaultdict # available in Python 2.5 and newer
urls_d = defaultdict(int)
for url in list_of_urls:
urls_d[url] += 1
urls = [{"url": key, "nbr": value} for key, value in urls_d.items()]
আপনি যদি পাইথন ২.7 বা তার থেকেও বেশি নতুন ব্যবহার করে থাকেন তবে আপনি এটি ওয়ান-লাইনারে করতে পারেন:
from collections import Counter
urls = [{"url": key, "nbr": value} for key, value in Counter(list_of_urls).items()]