learn - python language pdf



पायथन में लोअरकेस करने के लिए शब्दकोश (6)

आपको एक लूप या एक सूची / जनरेटर समझ का उपयोग करने की आवश्यकता होगी। यदि आप सभी कुंजियों और मूल्यों को कम करना चाहते हैं, तो आप ऐसा कर सकते हैं ::

dict((k.lower(), v.lower()) for k,v in {'My Key':'My Value'}.iteritems())

यदि आप केवल कुंजियाँ कम करना चाहते हैं, तो आप ऐसा कर सकते हैं ::

dict((k.lower(), v) for k,v in {'My Key':'My Value'}.iteritems())

शब्दकोश के निर्माण में जनरेटर के भाव (ऊपर प्रयुक्त) अक्सर उपयोगी होते हैं; मुझे उन्हें हर समय इस्तेमाल करना है। मेमोरी ओवरहेड में से कोई भी एक लूप समझ की सभी अभिव्यक्तियाँ।

मैं यह करना चाहता हूं लेकिन एक शब्दकोश के लिए:

"My string".lower()

क्या कोई फ़ंक्शन में बनाया गया है या मुझे एक लूप का उपयोग करना चाहिए?


जिस तरह से आप मल्टीलेवल फ़ंक्शंस का उपयोग कर सकते हैं उससे प्यार करें, यहाँ मेरा तरीका है लोअरकेस-इन कीज़

def to_lower(dictionary):

    def try_iterate(k):
        return lower_by_level(k) if isinstance(k, dict) else k

    def try_lower(k):
        return k.lower() if isinstance(k, str) else k

    def lower_by_level(data):
        return dict((try_lower(k), try_iterate(v)) for k, v in data.items())

    return lower_by_level(dictionary)

पायथन 3 में:

d = dict()
d = {k.casefold(): v for k, v in d.items()}

मैं इसका उत्तर देर से दे रहा हूं - जैसा कि प्रश्न में Python को टैग किया गया Python । इसलिए Python 2.x और Python 3.x दोनों के समाधान के साथ उत्तर देना, और गैर-स्ट्रिंग कुंजी के मामले को भी संभालना।

पायथन 2.x - शब्दकोश समझ का उपयोग करना

{k.lower() if isinstance(k, basestring) else k: v.lower() if isinstance(v, basestring) else v for k,v in yourDict.iteritems()}

डेमो :

>>> yourDict = {"Domain":"WORKGROUP", "Name": "CA-LTP-JOHN", 111: 'OK', "Is_ADServer": 0, "Is_ConnectionBroker": 0, "Domain_Pingable": 0}
>>> {k.lower() if isinstance(k, basestring) else k: v.lower() if isinstance(v, basestring) else v for k,v in yourDict.iteritems()}
{'domain': 'workgroup', 'name': 'ca-ltp-john', 'is_adserver': 0, 'is_connectionbroker': 0, 111: 'ok', 'domain_pingable': 0}

पायथन 3.x - पायथन 3.x में कोई iteritems() नहीं है

{k.lower() if isinstance(k, str) else k: v.lower() if isinstance(v, str) else v for k,v in yourDict.items()}

डेमो :

>>> dict((k.lower() if isinstance(k, basestring) else k, v.lower() if isinstance(v, basestring) else v) for k,v in yourDict.iteritems())
Traceback (most recent call last):
  File "python", line 1, in <module>
AttributeError: 'dict' object has no attribute 'iteritems'
>>> {k.lower() if isinstance(k, str) else k: v.lower() if isinstance(v, str) else v for k,v in yourDict.items()}
>>> {'domain': 'workgroup', 'name': 'ca-ltp-john', 111: 'ok', 'is_adserver': 0, 'is_connectionbroker': 0, 'domain_pingable': 0}

यदि आपूर्ति की गई शब्दकोश में कई प्रकार के कुंजी / मान (संख्यात्मक, स्ट्रिंग आदि) हैं; तो निम्न समाधान का उपयोग करें।

उदाहरण के लिए; यदि आपके पास mydict नाम का शब्दकोश है जैसा कि नीचे दिखाया गया है

mydict = {"FName":"John","LName":"Doe",007:true}

पायथन में 2.x

dict((k.lower() if isinstance(k, basestring) else k, v.lower() if isinstance(v, basestring) else v) for k,v in mydict.iteritems())

पायथन 3.x में

dict((k.lower() if isinstance(k, str) else k, v.lower() if isinstance(v, str) else v) for k,v in mydict.iteritems())

नोट: यह एकल आयामी शब्दकोशों पर अच्छा काम करता है


अजगर 3 में छोटा रास्ता: {k.lower(): v for k, v in my_dict.items()}





python