जबकि मेरे मूल उत्तर ने इस बिंदु को याद किया ( डिफ़ॉल्ट के कारखाने में एक्सेसिंग कुंजी के समाधान के साथ इस समस्या को हल करने की कोशिश करके ), मैंने वर्तमान प्रश्न के वास्तविक समाधान का प्रस्ताव करने के लिए इसे फिर से काम किया है।
यह रहा:
class walkableDict(dict):
def walk(self, callback):
try:
for key in self:
self[key] = callback(self[key])
except TypeError:
return False
return True
उपयोग:
>>> d = walkableDict({ k1: v1, k2: v2 ... })
>>> d.walk(f)
यह विचार है कि मूल तानाशाही को उप-वर्गित किया जाए ताकि इसे वांछित कार्यक्षमता दी जा सके: सभी मूल्यों पर एक फ़ंक्शन "मैपिंग"।
प्लस पॉइंट यह है कि इस शब्दकोश का उपयोग मूल डेटा को स्टोर करने के लिए किया जा सकता है जैसे कि यह dictएक कॉलबैक के साथ अनुरोध पर किसी भी डेटा को परिवर्तित करते समय किया गया था ।
बेशक, कक्षा और उस फ़ंक्शन को नाम देने के लिए स्वतंत्र महसूस करें जो आप चाहते हैं (इस उत्तर में चुना गया नाम PHP के array_walk()फ़ंक्शन से प्रेरित है )।
नोट: कार्यक्षमता के लिए न तो try- exceptब्लॉक और न ही returnकथन अनिवार्य हैं, वे PHP के व्यवहार को आगे बढ़ाने के लिए हैं array_walk।
dict((k, f(v)) for k, v in mydict.iteritems()), यानी वर्ग कोष्ठक के बिना, जो एक जनरेटर के माध्यम से मध्यवर्ती सूची के निर्माण को रोक देगा।