कैसे काम करता है collection.defaultdict?


529

मैंने अजगर डॉक्स में उदाहरण पढ़े हैं, लेकिन फिर भी यह पता नहीं लगा सकता कि इस विधि का क्या मतलब है। क्या कोई मदद कर सकता है? यहाँ अजगर डॉक्स से दो उदाहरण हैं

>>> from collections import defaultdict

>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> for k in s:
...     d[k] += 1
...
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]

तथा

>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> for k, v in s:
...     d[k].append(v)
...
>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

पैरामीटर intऔर listकिस लिए हैं?


15
BTW, आपके उपयोग के मामले के आधार पर, डिफ़ॉल्ट को पॉप्युलेट करने के बाद, इसे सेट करके केवल रीड-ओनली उपयोग के लिए डिफॉल्ट को फ्रीज करना न भूलेंdefault_factory = Noneइस प्रश्न को देखें ।
एक्यूमेनस

इसे भी देखें: stackoverflow.com/questions/17215400/…
dreftymac

जवाबों:


597

आमतौर पर, पायथन डिक्शनरी फेंकता है KeyErrorयदि आप एक कुंजी के साथ एक आइटम प्राप्त करने की कोशिश करते हैं जो वर्तमान में डिक्शनरी में नहीं है। defaultdictइसके विपरीत में बस किसी भी आइटम है कि आप का उपयोग करने का प्रयास करें (बेशक बशर्ते कि वे अभी तक अस्तित्व में नहीं है) का निर्माण करेगा। ऐसी "डिफ़ॉल्ट" आइटम बनाने के लिए, यह फ़ंक्शन ऑब्जेक्ट को कॉल करता है जिसे आप कंस्ट्रक्टर को पास करते हैं (अधिक सटीक रूप से, यह एक मनमाना "कॉल करने योग्य" ऑब्जेक्ट है, जिसमें फ़ंक्शन और टाइप ऑब्जेक्ट शामिल हैं)। पहले उदाहरण के लिए, डिफ़ॉल्ट आइटम का उपयोग करके बनाया जाता है int(), जो पूर्णांक ऑब्जेक्ट को वापस करेगा 0। दूसरे उदाहरण के लिए, डिफ़ॉल्ट आइटम का उपयोग करके बनाया जाता है list(), जो एक नई खाली सूची ऑब्जेक्ट देता है।


4
क्या यह d.get (कुंजी, default_val) के उपयोग से कार्यात्मक रूप से भिन्न है?
अंबरीश

29
@ अम्बरीश d.get(key, default)आपके शब्दकोष को कभी भी संशोधित नहीं करेगा - यह सिर्फ डिफ़ॉल्ट को लौटाएगा और शब्दकोश को अपरिवर्तित छोड़ देगा। defaultdictदूसरी ओर, शब्दकोश में एक कुंजी सम्मिलित करेगा यदि यह अभी तक नहीं है। यह एक बड़ा अंतर है; यह समझने के लिए प्रश्न में उदाहरण देखें कि क्यों।
स्वेन मार्नाच

हम कैसे जानते हैं कि प्रत्येक प्रकार के लिए डिफ़ॉल्ट मान क्या है? सूची के लिए इंट () और [] के लिए 0 सहज हैं, लेकिन अधिक जटिल या स्व-परिभाषित प्रकार भी हो सकते हैं।
सीन

1
@ सीन defaultdictआप जिस भी कंस्ट्रक्टर से गुजरते हैं उसे कॉल करते हैं। यदि आप एक प्रकार से गुजरते हैं T, तो मूल्यों का निर्माण किया जाएगा T()। सभी प्रकार के निर्माण किसी भी मापदंडों में पारित किए बिना नहीं किए जा सकते हैं। यदि आप इस प्रकार का निर्माण करना चाहते हैं, तो आपको एक आवरण फ़ंक्शन, या कुछ और की आवश्यकता है functools.partial(T, arg1, arg2)
स्वेन मार्नाच

223

defaultdictइसका मतलब है कि यदि शब्दकोश में कोई कुंजी नहीं मिली है, तो एक KeyErrorफेंक दिए जाने के बजाय , एक नई प्रविष्टि बनाई जाती है। इस नई प्रविष्टि का प्रकार डिफॉल्ट के तर्क द्वारा दिया गया है।

उदाहरण के लिए:

somedict = {}
print(somedict[3]) # KeyError

someddict = defaultdict(int)
print(someddict[3]) # print int(), thus 0

10
"इस नई जोड़ी का प्रकार डिफॉल्ट के तर्क द्वारा दिया गया है।" ध्यान दें कि तर्क किसी भी कॉल करने योग्य वस्तु हो सकता है - केवल प्रकार के कार्य नहीं। उदाहरण के लिए यदि फू एक फ़ंक्शन है जो "बार" लौटा है, तो फू को डिफॉल्ट डिक्टेट के तर्क के रूप में इस्तेमाल किया जा सकता है और यदि कोई गैर-वर्तमान कुंजी एक्सेस की गई थी, तो इसका मान "बार" पर सेट किया जाएगा।
lf215

13
या यदि आप बस "बार" वापस करना चाहते हैं: किसी दिन = डिफडिक्ट (लैम्ब्डा: "बार")
माइकल स्कॉट कथबर्ट

चौथी पंक्ति ने 0पूर्णांक लौटाया , अगर someddict = defaultdict(list)यह रिटर्न था [ ]। क्या 0 डिफ़ॉल्ट पूर्णांक है? या [] डिफ़ॉल्ट सूची?
गाथाईड

न तो। 0अपरिवर्तनीय है - CPython में से सभी मूल्यों -5को 256एकमात्र कैश नहीं किया जाता है, लेकिन इस कार्यान्वयन-विशिष्ट व्यवहार है - दोनों ही मामलों में एक नया उदाहरण के साथ "निर्मित" है हर बार int()या list()। इस तरह, d[k].append(v)एक ही सूची के संदर्भ में शब्दकोश को भरने के बिना काम कर सकता है, जो defaultdictलगभग बेकार हो जाएगा। यदि यह व्यवहार था, defaultdictएक पैरामीटर के रूप में, एक लैम्ब्डा नहीं, एक मूल्य लेगा। (भयानक स्पष्टीकरण के लिए क्षमा करें!)
wizzwizz4

93

defaultdict

"मानक डिक्शनरी में वैल्यू को पुनः प्राप्त करने और डिफॉल्ट के मौजूद न होने पर डिफ़ॉल्ट को स्थापित करने के लिए विधि सेटडेफॉल्ट () शामिल है। इसके विपरीत। defaultdict कॉर्नर को कंटेनर को इनिशियलाइज़ होने पर सामने वाले को डिफॉल्ट (वापस लौटाए जाने वाला) निर्दिष्ट करने देता है।"

उदाहरण के रूप में पायथन स्टैंडर्ड लाइब्रेरी में डौग हेलमैन द्वारा परिभाषित

डिफ़ॉल्ट का उपयोग कैसे करें

डिफ़ॉल्ट रूप से आयात करें

>>> from collections import defaultdict

प्रारंभिक निर्णय

इसे पास करके आरंभ करें

पहला तर्क के रूप में कॉल करने योग्य (अनिवार्य)

>>> d_int = defaultdict(int)
>>> d_list = defaultdict(list)
>>> def foo():
...     return 'default value'
... 
>>> d_foo = defaultdict(foo)
>>> d_int
defaultdict(<type 'int'>, {})
>>> d_list
defaultdict(<type 'list'>, {})
>>> d_foo
defaultdict(<function foo at 0x7f34a0a69578>, {})

** इसके दूसरे तर्क (वैकल्पिक) के रूप में kwargs

>>> d_int = defaultdict(int, a=10, b=12, c=13)
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12})

या

>>> kwargs = {'a':10,'b':12,'c':13}
>>> d_int = defaultdict(int, **kwargs)
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12})

यह कैसे काम करता है

जैसा कि मानक शब्दकोश का एक बच्चा वर्ग है, यह सभी समान कार्य कर सकता है।

लेकिन अज्ञात कुंजी को पारित करने के मामले में यह त्रुटि के बजाय डिफ़ॉल्ट मान लौटाता है। पूर्व के लिए:

>>> d_int['a']
10
>>> d_int['d']
0
>>> d_int
defaultdict(<type 'int'>, {'a': 10, 'c': 13, 'b': 12, 'd': 0})

यदि आप डिफ़ॉल्ट मान को बदलना चाहते हैं तो default_factory लिखें:

>>> d_int.default_factory = lambda: 1
>>> d_int['e']
1
>>> d_int
defaultdict(<function <lambda> at 0x7f34a0a91578>, {'a': 10, 'c': 13, 'b': 12, 'e': 1, 'd': 0})

या

>>> def foo():
...     return 2
>>> d_int.default_factory = foo
>>> d_int['f']
2
>>> d_int
defaultdict(<function foo at 0x7f34a0a0a140>, {'a': 10, 'c': 13, 'b': 12, 'e': 1, 'd': 0, 'f': 2})

प्रश्न में उदाहरण

उदाहरण 1

चूंकि int को default_factory के रूप में पारित किया गया है, कोई भी अज्ञात कुंजी 0 डिफ़ॉल्ट रूप से वापस आ जाएगी।

अब जैसे-जैसे स्ट्रिंग लूप में पास होगी, यह उन अल्फाबेट्स की गिनती को बढ़ाता जाएगा।

>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> d.default_factory
<type 'int'>
>>> for k in s:
...     d[k] += 1
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
>>> d
defaultdict(<type 'int'>, {'i': 4, 'p': 2, 's': 4, 'm': 1})

उदाहरण 2

के रूप में एक सूची को default_factory के रूप में पारित किया गया है, कोई भी अज्ञात (गैर-मौजूद) कुंजी डिफ़ॉल्ट रूप से वापस आ जाएगी [] (यानी। सूची)।

अब जैसे कि टुपल्स की सूची को लूप में पास किया जाता है, यह d [कलर] में वैल्यू को जोड़ देगा।

>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
>>> d = defaultdict(list)
>>> d.default_factory
<type 'list'>
>>> for k, v in s:
...     d[k].append(v)
>>> d.items()
[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
>>> d
defaultdict(<type 'list'>, {'blue': [2, 4], 'red': [1], 'yellow': [1, 3]})

20

शब्दकोश, नाम (कुंजी) द्वारा बाद में पुनर्प्राप्ति के लिए डेटा संग्रहीत करने का एक सुविधाजनक तरीका है। कुंजी अद्वितीय, अपरिवर्तनीय वस्तुएँ होनी चाहिए, और आमतौर पर तार होती हैं। एक शब्दकोश में मूल्य कुछ भी हो सकते हैं। कई अनुप्रयोगों के लिए, मान सरल प्रकार होते हैं जैसे पूर्णांक और तार।

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

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

from collections import defaultdict
ice_cream = defaultdict(lambda: 'Vanilla')

ice_cream['Sarah'] = 'Chunky Monkey'
ice_cream['Abdul'] = 'Butter Pecan'

print(ice_cream['Sarah'])
>>>Chunky Monkey

print(ice_cream['Joe'])
>>>Vanilla

यहां एक और उदाहरण है कि कैसे डिफॉल्ट का उपयोग करते हुए, हम जटिलता को कम कर सकते हैं

from collections import defaultdict
# Time complexity O(n^2)
def delete_nth_naive(array, n):
    ans = []
    for num in array:
        if ans.count(num) < n:
            ans.append(num)
    return ans

# Time Complexity O(n), using hash tables.
def delete_nth(array,n):
    result = []
    counts = defaultdict(int)

    for i in array:
        if counts[i] < n:
            result.append(i)
            counts[i] += 1
    return result


x = [1,2,3,1,2,1,2,3]
print(delete_nth(x, n=2))
print(delete_nth_naive(x, n=2))

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


18

यहां डिफॉल्ट की बड़ी व्याख्या है: http://ludovf.net/blog/python-collections-defaultdict/

मूल रूप से, पैरामीटर int और सूची ऐसे कार्य हैं जो आप पास करते हैं। याद रखें कि पायथन तर्कों के रूप में फ़ंक्शन नामों को स्वीकार करता है। int डिफ़ॉल्ट और सूची से 0 रिटर्न को कोष्ठक के साथ बुलाए जाने पर एक खाली सूची देता है।

सामान्य शब्दकोशों में, यदि आपके उदाहरण में मैं कॉल करने का प्रयास करता हूं d[a], तो मुझे एक त्रुटि मिलेगी (KeyError), चूंकि केवल चाबियाँ मी, s, i और p मौजूद हैं और कुंजी को प्रारंभ नहीं किया गया है। लेकिन एक डिफ़ॉल्ट रूप में, यह एक फ़ंक्शन नाम को एक तर्क के रूप में लेता है, जब आप एक कुंजी का उपयोग करने की कोशिश करते हैं जिसे प्रारंभ नहीं किया गया है, तो यह बस उस फ़ंक्शन को कॉल करता है जो आपने पास किया था और नई कुंजी के मान के रूप में इसके रिटर्न मान को असाइन करता है।


7

चूंकि सवाल "यह कैसे काम करता है" के बारे में है, कुछ पाठक अधिक नट और बोल्ट देखना चाह सकते हैं। विशेष रूप से, प्रश्न में __missing__(key)विधि विधि है। देखें: https://docs.python.org/2/library/collections.html#defaultdict-objects

अधिक संक्षेप में, यह उत्तर दिखाता है कि __missing__(key)व्यावहारिक तरीके से उपयोग कैसे किया जाए : https://stackoverflow.com/a/17956989/1593924

यह स्पष्ट करने के लिए कि clar कॉल करने योग्य ’का क्या अर्थ है, यहां एक इंटरैक्टिव सत्र (2.7.6 से लेकिन v3 में भी काम करना चाहिए):

>>> x = int
>>> x
<type 'int'>
>>> y = int(5)
>>> y
5
>>> z = x(5)
>>> z
5

>>> from collections import defaultdict
>>> dd = defaultdict(int)
>>> dd
defaultdict(<type 'int'>, {})
>>> dd = defaultdict(x)
>>> dd
defaultdict(<type 'int'>, {})
>>> dd['a']
0
>>> dd
defaultdict(<type 'int'>, {'a': 0})

यह डिफ़ॉल्ट का सबसे विशिष्ट उपयोग था (एक्स चर के व्यर्थ उपयोग को छोड़कर)। आप 0 के साथ स्पष्ट डिफ़ॉल्ट मान के रूप में एक ही काम कर सकते हैं, लेकिन एक साधारण मूल्य के साथ नहीं:

>>> dd2 = defaultdict(0)

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    dd2 = defaultdict(0)
TypeError: first argument must be callable

इसके बजाय, निम्नलिखित कार्य करता है क्योंकि यह एक साधारण फ़ंक्शन में गुजरता है (यह मक्खी पर एक नाममात्र फ़ंक्शन बनाता है जो कोई तर्क नहीं लेता है और हमेशा 0: 0)

>>> dd2 = defaultdict(lambda: 0)
>>> dd2
defaultdict(<function <lambda> at 0x02C4C130>, {})
>>> dd2['a']
0
>>> dd2
defaultdict(<function <lambda> at 0x02C4C130>, {'a': 0})
>>> 

और एक अलग डिफ़ॉल्ट मान के साथ:

>>> dd3 = defaultdict(lambda: 1)
>>> dd3
defaultdict(<function <lambda> at 0x02C4C170>, {})
>>> dd3['a']
1
>>> dd3
defaultdict(<function <lambda> at 0x02C4C170>, {'a': 1})
>>> 

7

मेरा अपना 2 own: आप डिफाल्ट को भी रद्द कर सकते हैं:

class MyDict(defaultdict):
    def __missing__(self, key):
        value = [None, None]
        self[key] = value
        return value

यह बहुत जटिल मामलों के लिए काम आ सकता है।


4

प्रत्येक कॉल के बजाय defaultdictआसानी से उपयोग किए जा सकने वाले व्यवहार की नकल की जा सकती है ।dict.setdefaultd[key]

दूसरे शब्दों में, कोड:

from collections import defaultdict

d = defaultdict(list)

print(d['key'])                        # empty list []
d['key'].append(1)                     # adding constant 1 to the list
print(d['key'])                        # list containing the constant [1]

के बराबर है:

d = dict()

print(d.setdefault('key', list()))     # empty list []
d.setdefault('key', list()).append(1)  # adding constant 1 to the list
print(d.setdefault('key', list()))     # list containing the constant [1]

अंतर केवल इतना है कि, का उपयोग करते हुए defaultdict, सूची निर्माणकर्ता को केवल एक बार कहा जाता है, और dict.setdefaultसूची निर्माणकर्ता का उपयोग अधिक बार कहा जाता है (लेकिन यदि वास्तव में आवश्यकता हो तो इससे बचने के लिए कोड को फिर से लिखा जा सकता है)।

कुछ का तर्क हो सकता है कि प्रदर्शन पर विचार चल रहा है, लेकिन यह विषय एक खान क्षेत्र है। इस पोस्ट से पता चलता है कि डिफ़ॉल्ट के उपयोग में बड़ा प्रदर्शन लाभ नहीं है, उदाहरण के लिए।

IMO, defaultdict एक संग्रह है जो कोड के लाभों की तुलना में अधिक भ्रम जोड़ता है। मेरे लिए बेकार है, लेकिन अन्य अलग सोच सकते हैं।


3

डिफ़ॉल्ट उपकरण पाइथन के संग्रह वर्ग में एक कंटेनर है। यह सामान्य शब्दकोश (तानाशाह) कंटेनर के समान है, लेकिन इसमें एक अंतर है: मूल्य क्षेत्रों का डेटा प्रकार आरंभीकरण पर निर्दिष्ट है।

उदाहरण के लिए:

from collections import defaultdict

d = defaultdict(list)

d['python'].append("awesome")

d['something-else'].append("not relevant")

d['python'].append("language")

for i in d.items():

    print i

यह प्रिंट:

('python', ['awesome', 'language'])
('something-else', ['not relevant'])

"मूल्य फ़ील्ड का डेटा प्रकार इनिशियलाइज़ेशन पर निर्दिष्ट है": यह सही नहीं है। एक तत्व फैक्टरी फ़ंक्शन प्रदान किया जाता है। यहां listएक लापता मूल्य को भरने के लिए कॉल करने का कार्य है, न कि वस्तुओं का प्रकार बनाने के लिए। उदाहरण के लिए, डिफ़ॉल्ट मान रखने के लिए 1, आप उपयोग करेंगे lambda:1जो स्पष्ट रूप से एक प्रकार नहीं है।
एएसएसी

2

मुझे लगता है कि स्विच केस स्टेटमेंट के स्थान पर इसका सबसे अच्छा उपयोग किया गया है। कल्पना करें कि हमारे पास नीचे के रूप में स्विच केस स्टेटमेंट है:

option = 1

switch(option) {
    case 1: print '1st option'
    case 2: print '2nd option'
    case 3: print '3rd option'
    default: return 'No such option'
}

switchअजगर में कोई केस स्टेटमेंट उपलब्ध नहीं है । हम उसी का उपयोग करके प्राप्त कर सकते हैं defaultdict

from collections import defaultdict

def default_value(): return "Default Value"
dd = defaultdict(default_value)

dd[1] = '1st option'
dd[2] = '2nd option'
dd[3] = '3rd option'

print(dd[4])    
print(dd[5])    
print(dd[3])

यह प्रिंट करता है:

Default Value
Default Value
3rd option

उपरोक्त स्निपेट ddमें कोई कुंजी 4 या 5 नहीं है और इसलिए यह एक डिफ़ॉल्ट मान प्रिंट करता है जिसे हमने एक सहायक फ़ंक्शन में कॉन्फ़िगर किया है। यह एक कच्चे शब्दकोश की तुलना में काफी अच्छा है जहां KeyErrorकुंजी मौजूद नहीं होने पर फेंक दिया जाता है। इससे यह स्पष्ट है कि defaultdictस्विच केस स्टेटमेंट की तरह अधिक है जहां हम एक जटिल if-elif-elif-elseब्लॉक से बच सकते हैं।

एक और अच्छा उदाहरण जिसने मुझे इस साइट से बहुत प्रभावित किया है:

>>> from collections import defaultdict
>>> food_list = 'spam spam spam spam spam spam eggs spam'.split()
>>> food_count = defaultdict(int) # default value of int is 0
>>> for food in food_list:
...     food_count[food] += 1 # increment element's value by 1
...
defaultdict(<type 'int'>, {'eggs': 1, 'spam': 7})
>>>

यदि हम इसके अलावा किसी भी वस्तु तक पहुँचने का प्रयास करते हैं eggsऔर spamहमें 0 की गिनती मिलेगी।


2

इसके बिना defaultdict, आप संभवतः अनदेखी मान के लिए नए मान निर्दिष्ट कर सकते हैं, लेकिन आप इसे संशोधित नहीं कर सकते। उदाहरण के लिए:

import collections
d = collections.defaultdict(int)
for i in range(10):
  d[i] += i
print(d)
# Output: defaultdict(<class 'int'>, {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9})

import collections
d = {}
for i in range(10):
  d[i] += i
print(d)
# Output: Traceback (most recent call last): File "python", line 4, in <module> KeyError: 0

2

वैसे, डिफाल्ड डिक्ट्री निम्नलिखित मामले में कीरोर को भी बढ़ा सकती है:

    from collections import defaultdict
    d = defaultdict()
    print(d[3]) #raises keyerror

हमेशा डिफाल्टडिक्ट (int) जैसे डिफॉल्ट का तर्क देना याद रखें।


0

मानक डिक्शनरी में वैल्यू प्राप्त करने और डिफॉल्ट मौजूद नहीं होने पर एक डिफॉल्ट स्थापित करने के लिए विधि सेटडेफॉल्ट () शामिल है। इसके विपरीत, डिफाल्ड डिक्टेट कंटेनर को आरंभीकृत करने पर सामने वाले को डिफ़ॉल्ट निर्दिष्ट करने देता है।

import collections

def default_factory():
    return 'default value'

d = collections.defaultdict(default_factory, foo='bar')
print 'd:', d
print 'foo =>', d['foo']
print 'bar =>', d['bar']

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

$ python collections_defaultdict.py

d: defaultdict(<function default_factory at 0x100468c80>, {'foo': 'bar'})
foo => bar
bar => default value

0

संक्षेप में:

defaultdict(int) - तर्क int इंगित करता है कि मान इंट प्रकार होंगे।

defaultdict(list) - तर्क सूची इंगित करती है कि मान सूची प्रकार होंगे।


-9

प्रलेखन और स्पष्टीकरण बहुत अधिक आत्म-व्याख्यात्मक हैं:

http://docs.python.org/library/collections.html#collections.defaultdict

एक तर्क के रूप में पारित प्रकार फ़ंक्शन (int / str आदि) का उपयोग किसी दिए गए कुंजी के लिए डिफ़ॉल्ट मान को प्रारंभ करने के लिए किया जाता है जहां कुंजी हुक में मौजूद नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.