Подтвердить что ты не робот

Доступ к глубокому словарю с поддержкой 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']

Это проходит pep8, но кажется менее идеальным

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

Есть ли способ разбить линию так, чтобы она выглядела хорошо и совместима с pep8?

4b9b3361

Ответ 1

Возможно, это не лучший способ, но он работает:

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

Ответ 2

Если вы используете его внутри функции (и вы можете использовать функцию print() как функцию, начиная с 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'])