• Home
  • /
  • Blog
  • /
  • पायथन संग्रह मॉड्यूल में 9 उपयोगी कंटेनर जिन्हें आपको जानना चाहिए

पायथन संग्रह मॉड्यूल में 9 उपयोगी कंटेनर जिन्हें आपको जानना चाहिए

बच्चों के लिए सर्वश्रेष्ठ रचनात्मक उपकरण

This post is also available in: English (English) العربية (Arabic)

पायथन में कंटेनर क्या हैं?

एक कंटेनर एक ऐसी वस्तु है जिसका उपयोग विभिन्न वस्तुओं को संग्रहीत करने के लिए किया जाता है और निहित वस्तुओं तक पहुँचने और उन पर पुनरावृति करने का एक तरीका प्रदान करता है।

पायथन कई कंटेनर डेटाटाइप प्रदान करता है, दोनों अंतर्निहित प्रकार और पायथन स्टैण्डर्ड लाइब्रेरी में संग्रह मॉड्यूल में हैं।

अलग-अलग डेटा कंटेनर अलग-अलग उद्देश्यों की पूर्ति करते हैं, अलग-अलग कार्यक्षमता प्रदान करते हैं, और समान प्रकार की गणनाओं के लिए संभावित रूप से बहुत अलग कम्प्यूटेशनल प्रदर्शन प्रस्तुत करते हैं। इस प्रकार, कार्य के लिए सही कंटेनर चुनना अच्छा प्रदर्शन प्राप्त करने के लिए एक महत्वपूर्ण कदम है। पायथन में संग्रह वे कंटेनर हैं जिनका उपयोग डेटा के संग्रह को संग्रहीत करने के लिए किया जाता है, उदाहरण के लिए, लिस्ट (list), डिक्ट (dict), सेट (set), टपल (tuple), आदि। ये अंतर्निहित संग्रह (बिल्ट-इन कलेक्शंस) हैं। इनके अलावा कई अन्य मॉड्यूल विकसित किए गए हैं जो डेटा के संग्रह को स्टोर करने के लिए अतिरिक्त डेटा संरचना प्रदान करते हैं। ऐसा ही एक मॉड्यूल है पायथन कलेक्शन मॉड्यूल

पायथन संग्रह मॉड्यूल में कंटेनर

पायथन का संग्रह मॉड्यूल निम्नलिखित 9 विभिन्न कंटेनर प्रदान करता है।

1. काउंटर (Counter)

एक काउंटर एक कंटेनर है जो ट्रैक करता है कि कितनी बार समकक्ष मान जोड़े गए हैं। पायथन काउंटर क्लास संग्रह मॉड्यूल का एक हिस्सा है और एक डिक्शनरी (dictionary) की सब क्लास है।

आप काउंटरों को वस्तुओं के एक अनियंत्रित संग्रह के रूप में सोच सकते हैं जहां वस्तुओं को डिक्शनरी कीज़ के रूप में संग्रहीत किया जाता है और उनकी गणना डिक्शनरी स्टैंडर्ड्स के रूप में होती है।

पायथन में कंटेनर
काउंटर

काउंटर आइटम धनात्मक, शून्य या ऋणात्मक पूर्णांक हो सकते हैं। हालांकि इसकी चाबियों और मूल्यों में कोई प्रतिबंध नहीं है, आम तौर पर मान संख्या होने का इरादा है लेकिन अन्य ऑब्जेक्ट प्रकारों को भी स्टोर कर सकते हैं।

काउंटर आरंभीकरण के तीन रूपों का समर्थन करता है:

  • इसके कन्स्ट्रुक्टर को वस्तुओं के अनुक्रम के साथ बुलाया जा सकता है
  • एक डिक्शनरी जिसमें कीज़ और काउंट्स होते हैं
  • कीवर्ड तर्कों का उपयोग करके स्ट्रिंग नामों को गिनने के लिए मैप कर सकते हैं।

निम्नलिखित कोड इसके उपयोग को प्रदर्शित करता है।

import collections
print (collections.Counter(['a', 'b', 'c', 'a', 'b', 'b']))
print (collections.Counter({'a': 2, 'b': 3, 'c':1}))
print(collections.Counter(a=2, b=3, c=1))

इनिशियलाइज़ेशन के तीनों रूपों से आउटपुट समान हैं:

Counter({'b': 3, 'a': 2, 'c': 1})
Counter({'b': 3, 'a': 2, 'c': 1})
Counter({'b': 3, 'a': 2, 'c': 1})

2. ऑर्डर्ड डिक्ट (OrderedDict)

ऑर्डर्ड डिक्ट पायथन में डिक्ट (dict) वस्तु की एक सब क्लास है। OrderedDict और Dict के बीच एकमात्र अंतर यह है कि OrderedDict में, यह सम्मिलित किए गए कुंजियों (keys) के क्रम को बनाए रखता है। डिक्ट में, आर्डर (क्रम) हो भी सकता है और नहीं भी।

इस उदाहरण में हम देख सकते हैं कि डिक्ट का क्रम भिन्न हो सकता है। लेकिन ऑर्डर्ड डिक्ट के लिए। यह फिक्स रहता है।

import collections
#Create normal dict
my_dict = {}
my_dict['AA'] = 11
my_dict['CC'] = 33
my_dict['BB'] = 22
my_dict['DD'] = 44
for item in my_dict.items():
   print(item)
print()
#Create ordered dict
my_ord_dict = collections.OrderedDict()
my_dict['AA'] = 11
my_dict['CC'] = 33
my_dict['BB'] = 22
my_dict['DD'] = 44
for item in my_ord_dict.items():
   print(item)

उपरोक्त कोड का आउटपुट है:

('AA', 11)
('CC', 33)
('BB', 22)
('DD', 44)

('AA', 11)
('BB', 22)
('CC', 33)
('DD', 44)

3. डिफॉल्टडिक्ट (defaultdict)

एक डिफॉल्ट डिक्ट बिल्कुल सामान्य निर्देश की तरह काम करता है, लेकिन इसे एक फ़ंक्शन (“डिफ़ॉल्ट फ़ैक्टरी”) के साथ प्रारंभ किया जाता है जो कोई तर्क नहीं लेता है और एक गैर-मौजूद कुंजी के लिए डिफ़ॉल्ट मान प्रदान करता है।

एक डिफॉल्टडिक्ट कभी भी KeyError उत्पन्न नहीं करेगा। कोई भी कुंजी जो मौजूद नहीं है उसे डिफ़ॉल्ट फ़ैक्टरी द्वारा लौटाया गया मान मिलता है।

निम्नलिखित कोड डिफॉल्टडिक्ट के कार्य की व्याख्या करता है:

from collections import defaultdict
ice_cream = defaultdict(lambda: 'Vanilla')
ice_cream['Sarah'] = 'Strawberry'
ice_cream['Abdul'] = 'Butter Pecan'
print ice_cream['Sarah']
print ice_cream['Joe']

उपरोक्त कोड का आउटपुट है:

Strawberry
Vanilla

4. चेनमैप (ChainMap)

चैनमैप कई डिक्श्नरी को एक इकाई में समाहित करता है। चैन मैप से सभी डिक्शनरी के की-वैल्यूज जोड़े को प्रदर्शित करने के लिए मानचित्रों का उपयोग किया जाता है। keys() विधि (मेथड) चैनमैप से कीज़ लौटाती है, और value() विधि चैनमैप से विभिन्न कीज़ के मान लौटाती है।

पायथन में कंटेनर

निम्नलिखित उदाहरण चैनमैप के उपयोग को दर्शाता है:

from collections import ChainMap 
d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}
d3 = {'e': 5, 'f': 6}
# Defining the chainmap 
c = ChainMap(d1, d2, d3) 
# Accessing Values using key name
print(c['a'])
# Accessing values using values()
print(c.values())  
# Accessing keys using keys()
print(c.keys())

उपरोक्त कोड का आउटपुट है:

1
ValuesView(ChainMap({‘a’: 1, ‘b’: 2}, {‘c’: 3, ‘d’: 4}, {‘e’: 5, ‘f’: 6}))
KeysView(ChainMap({‘a’: 1, ‘b’: 2}, {‘c’: 3, ‘d’: 4}, {‘e’: 5, ‘f’: 6}))

6. नेम्ड टपल (namedtuple)

पायथन के नेम्ड टपल को पूर्णांक सूचकांकों के बजाय वर्णनात्मक फ़ील्ड नामों का उपयोग करके मूल्यों तक पहुंचने का एक तरीका प्रदान करके कोड पठनीयता में सुधार करने के लिए बनाया गया था, जो कि ज्यादातर समय मूल्यों के बारे में कोई संदर्भ प्रदान नहीं करता है। यह सुविधा कोड को क्लीनर और अधिक रखरखाव योग्य भी बनाती है।

इसके विपरीत, एक नियमित टपल में मूल्यों के लिए सूचकांकों का उपयोग करना कष्टप्रद, पढ़ने में कठिन और त्रुटि-प्रवण हो सकता है। यह विशेष रूप से सच है यदि ट्यूपल में बहुत सारे क्षेत्र हैं और जहां से आप इसका उपयोग कर रहे हैं, उससे बहुत दूर बनाया गया है।

सामान्य तौर पर, जहाँ भी आपको नेम्ड टपल जैसी वस्तु की आवश्यकता होती है, आप नामांकित उदाहरणों का उपयोग कर सकते हैं। नामांकित टुपल्स का लाभ यह है कि वे डॉट नोटेशन के साथ फ़ील्ड नामों का उपयोग करके अपने मूल्यों तक पहुंचने का एक तरीका प्रदान करते हैं।

निम्नलिखित कोड नेम्ड टपल का उपयोग करने के लाभ को दर्शाता है:

from collections import namedtuple
# Declaring namedtuple() 
Student = namedtuple('Student',['name','age','DOB']) 
# Adding values 
S = Student('Rakesh','18','2542003') 
# Access using index 
print ("The Student age using index is : ",end ="") 
print (S[1]) 
# Access using name  
print ("The Student name using keyname is : ",end ="") 
print (S.name)

उपरोक्त कोड का आउटपुट है:

The Student age using index is : 18
The Student name using keyname is : Rakesh

7. डी क्यू (Deque)

एक डबल-एंडेड क्यू, या डी क्यू, में किसी भी छोर से तत्वों को जोड़ने और हटाने की सुविधा है। इसमें उन तत्वों को जोड़ने और हटाने की विधियाँ हैं जिन्हें सीधे तर्कों के साथ लागू किया जा सकता है।

निम्नलिखित कोड डी क्यू के उपयोग को दर्शाता है:

import collections
# Create a deque
DoubleEnded = collections.deque(["Mon","Tue","Wed"])
print (DoubleEnded)
# Append to the right
print("Adding to the right: ")
DoubleEnded.append("Thu")
print (DoubleEnded)
# append to the left
print("Adding to the left: ")
DoubleEnded.appendleft("Sun")
print (DoubleEnded)
# Remove from the right
print("Removing from the right: ")
DoubleEnded.pop()
print (DoubleEnded)
# Remove from the left
print("Removing from the left: ")
DoubleEnded.popleft()
print (DoubleEnded)
# Reverse the dequeue
print("Reversing the deque: ")
DoubleEnded.reverse()
print (DoubleEnded)

उपरोक्त कोड का आउटपुट है:

deque(['Mon', 'Tue', 'Wed'])
Adding to the right: 
deque(['Mon', 'Tue', 'Wed', 'Thu'])
Adding to the left: 
deque(['Sun', 'Mon', 'Tue', 'Wed', 'Thu'])
Removing from the right: 
deque(['Sun', 'Mon', 'Tue', 'Wed'])
Removing from the left: 
deque(['Mon', 'Tue', 'Wed'])
Reversing the deque: 
deque(['Wed', 'Tue', 'Mon'])

8. यूज़र डिक्ट (UserDict)

पायथन हमें डेटा से की-वैल्यू से निपटने के लिए एक डिक्शनरी डेटा स्ट्रक्चर प्रदान करता है। यूज़र डिक्ट इसमें अनुकूलन (कस्टमइजशन) जोड़ता है।

डिक्शनरी हमें एक डेटा स्ट्रक्चर बनाने में मदद करता है जो एक स्थिर प्रारूप में की-वैल्यू जोड़े रखता है। यूज़र डिक्ट के साथ, हम एक अनुकूलित डिक्शनरी बनाकर कुछ संशोधित कार्यक्षमता जोड़ सकते हैं।

यह डिक्शनरी वस्तुओं के चारों ओर एक आवरण वर्ग की तरह व्यवहार करता है। इसके द्वारा हम मौजूदा डिक्शनरी ऑब्जेक्ट में आसानी से नया व्यवहार जोड़ सकते हैं।

यूज़र डिक्ट संग्रह मौजूदा शब्दकोश को एक तर्क के रूप में स्वीकार करता है और एक डिक्शनरी संरचना को ट्रिगर करता है जो सामान्य डिक्ट ऑब्जेक्ट में संग्रहीत होता है।

निम्नलिखित कोड यूज़र डिक्ट के उपयोग को दर्शाता है:

from collections import UserDict
class mydata(UserDict):
	def pop(self, s = None):
		raise RuntimeError("Deletion not allowed")
mydict = mydata({'x':10,
    'y': 20})
print(mydict)
#Deleting From Dict
mydict.pop()

उपरोक्त कोड का आउटपुट है:

{'x': 10, 'y': 20}
Traceback (most recent call last):
  File "/home/demo.py", line 15, in <module>
    mydict.pop()
  File "/home/demo.py", line 7, in pop  	
    raise RuntimeError("Deletion not allowed")
RuntimeError: Deletion not allowed

9. यूज़र लिस्ट (UserList)

यूज़र डिक्ट की तरह, यूज़र लिस्ट भी आपको क्लास में शामिल करने के लिए पाइथन में सूचियों को अनुकूलित करने का एक तरीका प्रदान करता है। पायथन लिस्ट्स समान प्रकार के डेटा को अलग-अलग डेटा प्रकारों के साथ पूरी तरह से संग्रहीत करती हैं। यूज़र लिस्ट आपको सूची को अनुकूलित करने और उनमें से उपयोगकर्ता-परिभाषित क्लास बनाने के लिए एक विशेषता के रूप में उपयोग करने में आपकी सहायता करता है। लिस्ट को एक उदाहरण के रूप में जोड़ने के बाद, यह एक लिस्ट को ट्रिगर करता है जिसे सामान्य लिस्ट डेटा स्ट्रक्चर में रखा जाता है।

निम्नलिखित कोड यूज़र लिस्ट के उपयोग को दर्शाता है:

from collections import UserList 
# Creating a List where 
# deletion is not allowed 
class MyList(UserList): 
    # Function to stop deletion 
    # from List 
    def remove(self, s = None): 
        raise RuntimeError("Deletion not allowed") 
    # Function to stop pop from  
    # List 
    def pop(self, s = None): 
        raise RuntimeError("Deletion not allowed") 
# Driver's code 
L = MyList([1, 2, 3, 4]) 
print("Original List") 
# Inserting to List" 
L.append(5) 
print("After Insertion") 
print(L) 
# Deleting From List 
L.remove()

उपरोक्त कोड का आउटपुट है:

Original List
After Insertion
[1, 2, 3, 4, 5]
Traceback (most recent call last):
  File "/home/UL.py", line 33, in <module>
    L.remove() 
  File "/home/UL.py", line 15, in remove
    raise RuntimeError("Deletion not allowed") 
RuntimeError: Deletion not allowed
{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}
>