यह चीजों को व्यवस्थित करने का एक बहुत ही अजीब तरीका है। यदि आप किसी शब्दकोश में संग्रहीत हैं, तो यह आसान है:
# 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
प्रतिदेय लेता है आप में पारित कर दिया, और डिफ़ॉल्ट मान प्राप्त करने के लिए यह कहता है। इस मामले में, हम कक्षा में पास हुए int
; जब पायथन कॉल करता है तो int()
यह शून्य मान देता है। इसलिए, पहली बार जब आप किसी URL का संदर्भ लेते हैं, तो उसकी गणना शून्य से आरंभ की जाती है, और फिर आप एक गणना में जोड़ते हैं।
लेकिन काउंट से भरा एक शब्दकोश भी एक सामान्य पैटर्न है, इसलिए पायथन एक तैयार-से-उपयोग वर्ग प्रदान करता है: 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()]
यदि आप पायथन 2.7 या नए का उपयोग कर रहे हैं, तो आप इसे एक-लाइनर में कर सकते हैं:
from collections import Counter
urls = [{"url": key, "nbr": value} for key, value in Counter(list_of_urls).items()]