एक defaultdict
डिफ़ॉल्ट मान के लिए आम तौर पर है नहीं वास्तव में एक मूल्य, यह एक कारखाने: एक विधि है कि एक नया मान उत्पन्न करता है। आप एक लैम्ब्डा अभिव्यक्ति कि एक सूची बनाता है का उपयोग करके इस समस्या को हल कर सकते हैं:
lst = lambda:list(range(0,5))
d = defaultdict(lst)
यह भी यहाँ एक अच्छा विचार है, अन्यथा सभी मूलभूत मूल्यों होगा संदर्भ एक ही सूची के बाद से। यहाँ उदाहरण के लिए:
d[1].append(14)
d[2]
पर प्रभाव (दोनों d[1]
और d[2]
दिया मौजूद नहीं था) नहीं होगा।
आप तथापि प्राप्त कर सकते हैं इस साथ:
val = list(range(0,5))
lst = lambda:val
d = defaultdict(lst)
लेकिन इस अवांछित दुष्प्रभाव हो सकते हैं: अगर आप यहाँ d[1].append(14)
प्रदर्शन तो d[2]
[1,2,3,4,5,12]
हो जाएगा और d[1] is d[2]
True
हो जाएगा:
$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from collections import defaultdict
>>> val = list(range(0,5))
>>> lst = lambda:val
>>> d = defaultdict(lst)
>>> d[1]
[0, 1, 2, 3, 4]
>>> d[1].append(14)
>>> d[2]
[0, 1, 2, 3, 4, 14]
>>> d[1] is d[2]
True
जबकि:
$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from collections import defaultdict
>>> lst = lambda:list(range(0,5))
>>> d = defaultdict(lst)
>>> d[1]
[0, 1, 2, 3, 4]
>>> d[1].append(14)
>>> d[2]
[0, 1, 2, 3, 4]
>>> d[1] is d[2]
False
अच्छी तरह से समझाया। –
@ जीन-फ्रैंकोइसफैबर: धन्यवाद :) –
इसलिए मैं मौजूदा सूची पर डिफॉल्ट डिक्ट का उपयोग नहीं कर सकता, 'ए = [5,2,3] 'कहूं? – Arcyno