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

Python "лучшая практика форматирования" для списков, словарей и т.д.

Я просмотрел документацию Python для лучшей практики форматирования кода для больших списков и словарей, например

something = {'foo' : 'bar', 'foo2' : 'bar2', 'foo3' : 'bar3'..... 200 chars wide, etc..}

или

something = {'foo' : 'bar',
             'foo2' : 'bar2',
             'foo3' : 'bar3',
             ...
             }

или

something = {
             'foo' : 'bar',
             'foo2' : 'bar2',
             'foo3' : 'bar3',
             ...
             }

Как обрабатывать глубокую вложенность списков/словарей?

4b9b3361

Ответ 1

Мой предпочтительный способ:

something = {'foo': 'bar',
             'foo2': 'bar2',
             'foo3': 'bar3',
             ...
             'fooN': 'barN'}

Ответ 2

стиль отступов aaronasterling - это то, что я предпочитаю. Это и несколько других стилей объясняются в другом SO-вопросе. Особенно ответ Lennart Regebro дал хороший обзор.

Но этот стиль был самым проголосовавшим за:

my_dictionary = {
    1: 'something',
    2: 'some other thing',
}

Ответ 4

Определите свой словарь любым способом, а затем попробуйте следующее:

from pprint import pprint

pprint(yourDict)

# for a short dictionary it returns:

{'foo': 'bar', 'foo2': 'bar2', 'foo3': 'bar3'}

# for a longer/nested:

{'a00': {'b00': 0,
         'b01': 1,
         'b02': 2,
         'b03': 3,
         'b04': 4,
         'b05': 5,
         'b06': 6,
         'b07': 7,
         'b08': 8,
         'b09': 9},
 'a01': 1,
 'a02': 2,
 'a03': 3,
 'a04': 4,
 'a05': 5,
 'a06': 6,
 'a07': 7,
 'a08': 8,
 'a09': 9,
 'a10': 10}

Вам нравится вывод?

Ответ 5

Если вы идете по ganeti (что соответствует PEP 8), вы должны выбрать третий вариант.

something = {
             'foo1': 'bar1',
             'foo2': 'bar2',
             'foo3': 'bar3',
             ...
             }

Мне нравится этот esp. потому что вы можете выбрать только те элементы, которые вы хотите. И я чувствую, что удаление или добавление элементов в оба конца происходит быстрее.

Примечание.. Как отмечено в комментарии, не должно быть пробелов перед ':' (E203) в соответствии с PEP.

Ответ 6

Я предпочитаю второй или третий.

Причина:

  • Каждый элемент находится в отдельной строке
  • Достижение конца строки для добавления нового элемента - боль в текстовом редакторе
  • Добавление нового элемента легко
  • При третьем варианте иногда вы можете проверить количество элементов, выбрав эти строки. Большинство редакторов сообщают вам количество выбранных строк.

Ответ 7

Ну, первый - это не-go, так как ваши строки должны быть всего 79 символов. Что касается двух других вариантов, я полагаю, что это вопрос вкуса, но я лично предпочитаю второй вариант.

Ответ 8

Определенно НЕ вариант 1, одна из сильных сторон Python - это его удобочитаемость. Вариант 1 значительно уменьшает эту удобочитаемость.

Из 2 и 3 я буду повторять те же причины, о которых пифунк заявил для обоих.

Однако в моем собственном коде я предпочитаю вариант 3 просто потому, что первый элемент иногда "теряется", находясь в конце строки объявления, и, быстро взглянув на код, я просто не увижу его немедленно. Я знаю это немного глупо, но ум работает таинственным образом...

Ответ 9

Мне нравится второй способ:

something = {'foo' : 'bar',
         'foo2' : 'bar2',
         'foo3' : 'bar3',
         ...
         'fooN': 'barN'}

Ответ 10

Прежде чем читать этот пост, я бы выбрал третий вариант, который вы дадите. Но теперь я могу пойти за тем, который не является типом Török Gábor:

my_dictionary = {   1: "что-то",   2: "что-то другое", }

Но, честно говоря, все, что было в стороне от вашего первого варианта, возможно, прекрасно.