defaultdict
डिफ़ॉल्ट तब स्थिर होता है, जब नई सूची की तरह डिफ़ॉल्ट मान स्थिर होता है, लेकिन इतना अधिक नहीं कि यह गतिशील हो।
उदाहरण के लिए, मुझे स्ट्रेट को अनूठे किलों में मैप करने के लिए एक शब्दकोश की आवश्यकता है। defaultdict(int)
हमेशा डिफ़ॉल्ट मान के लिए 0 का उपयोग करेगा। इसी तरह, defaultdict(intGen())
हमेशा 1 पैदा करता है।
इसके बजाय, मैंने एक नियमित रूप से तानाशाही का इस्तेमाल किया:
nextID = intGen()
myDict = {}
for lots of complicated stuff:
#stuff that generates unpredictable, possibly already seen str
strID = myDict.setdefault(myStr, nextID())
ध्यान दें कि dict.get(key, nextID())
अपर्याप्त है क्योंकि मुझे इन मूल्यों को बाद में भी संदर्भित करने में सक्षम होने की आवश्यकता है।
intGen
एक छोटा वर्ग है जो मैं निर्माण करता हूं जो स्वचालित रूप से एक इंट्री बढ़ाता है और उसका मूल्य लौटाता है:
class intGen:
def __init__(self):
self.i = 0
def __call__(self):
self.i += 1
return self.i
अगर किसी के पास ऐसा करने का तरीका है तो defaultdict
मैं इसे देखना पसंद करूंगा।