pep8 compliant deep dictionary access

2019-01-19 10:56发布

问题:

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'])


标签: python pep8