2013-04-24 5 views
13

गहरी शब्दकोश पहुंच करने के लिए pep8 अनुपालन तरीका क्या है?pep8 अनुपालन गहरी शब्दकोश पहुंच

dct = { 
    'long_key_name_one': { 
     'long_key_name_two': { 
      'long_key_name_three': { 
       'long_key_name_four': { 
        'long_key_name_five': 1 
       } 
      } 
     } 
    } 
} 

E501 लाइन बहुत लंबी (118> 80 वर्ण) से पहले

print dct['long_key_name_one']['long_key_name_two']['long_key_name_three']['long_key_name_four']['long_key_name_five'] 

E211 खाली स्थान के '['

print dct['long_key_name_one']['long_key_name_two']\ 
    ['long_key_name_three']['long_key_name_four']['long_key_name_five'] 

E124 बंद कोष्ठक दृश्य खरोज से मेल नहीं खाता

print dct['long_key_name_one']['long_key_name_two' 
    ]['long_key_name_three']['long_key_name_four']['long_key_name_five'] 

यह पेप 8 पास करता है लेकिन आदर्श

print dct['long_key_name_one']['long_key_name_two'][ 
    'long_key_name_three' 
]['long_key_name_four']['long_key_name_five'] 

क्या लाइन को तोड़ने का कोई तरीका है ताकि यह अच्छा लगे और पेप 8 अनुपालन हो?

+2

यदि कुंजी पहले से ही एक सूची में हैं और आप जानते हैं कि मान मौजूद है तो आप यह कर सकते हैं: 'value = less (dict.get, keys, dct)'। – jfs

उत्तर

6
शायद नहीं

सबसे अच्छा तरीका है, लेकिन यह काम करता है:

a = dct['long_key_name_one']['long_key_name_two'] 
b = a['long_key_name_three']['long_key_name_four']['long_key_name_five'] 

लेकिन यह भी काम करता है, जो सुझाव दिया विधि है:

print (dct['long_key_name_one']['long_key_name_two'] 
     ['long_key_name_three']['long_key_name_four'] 
     ['long_key_name_five']) 
+1

मुझे लगता है कि पहला तरीका सबसे अच्छा विकल्प है। इसके अलावा, वास्तव में, सबसे अच्छा विकल्प है कि आप अपने डेटा संरचनाओं को बेहतर तरीके से डिजाइन करें ताकि आप इसे पहले स्थान पर न चलाएं। ऐसे कई मामले नहीं हैं जहां आपको ऑब्जेक्ट्स का पेड़ 5 स्तर गहरा हो गया है, जहां मध्यवर्ती स्तरों में से कोई भी अपने आप पर उपयोगी नहीं है- और यदि आपके पास ऐसा कोई मामला है, तो शायद आप पेड़ का उपयोग कर बेहतर हो इस तरह की पहुंच से इटरेटर या डोम-शैली की खोज। – abarnert

+0

यदि आपको कोई मूल्य निर्धारित करने की आवश्यकता है तो पहला तरीका आपकी सहायता नहीं करता है। – tponthieux

+0

@tponthieux: यकीन है कि यह करता है। 'ए' 'dct' में आंतरिक शब्दकोश का सिर्फ एक नाम है। 'एक [के] = v' इस मामले में' dct ['long_key_name_one'] ['long_key_name_two'] [k] = v' के बराबर है। – jfs

3

आप एक समारोह के अंदर यह का उपयोग करते हैं (और आप कर सकते थे 2.7 afaik)

तुम सिर्फ एक कोष्ठकों के भीतर निहित संयोजन इस्तेमाल कर सकते हैं के बाद से एक समारोह के रूप प्रिंट() का उपयोग

print(dct['long_key_name_one'] 
     ['long_key_name_two'] 
     ['long_key_name_three'] 
     ['long_key_name_four'] 
     ['long_key_name_five']) 
संबंधित मुद्दे