pep8 compliant deep dictionary access

江枫思渺然 提交于 2019-11-27 06:39:04

问题


What is the pep8 compliant way to do deep dictionary access?

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

E501 line too long (118 > 80 characters)

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

E211 whitespace before '['

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

E124 closing bracket does not match visual indentation

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

This passes pep8 but seems less than ideal

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

Is there a way to break up the line so that it looks nice and is pep8 compliant?


回答1:


Perhaps not the best way, but it works:

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

But this also works, which is the suggested method:

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



回答2:


If you use it inside a function (and you could use print() as a function since 2.7 afaik)

You could just use implicit concatenation within a parentheses

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


来源:https://stackoverflow.com/questions/16204076/pep8-compliant-deep-dictionary-access

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!