Как правильно форматировать многострочный dict в Python? - PullRequest
158 голосов
/ 17 июня 2011

В Python я хочу написать многострочный dict в моем коде. Существует несколько способов его форматирования. Вот некоторые из них, о которых я мог подумать:

  1. mydict = { "key1": 1,
               "key2": 2,
               "key3": 3, }
    
  2. mydict = { "key1": 1,
               "key2": 2,
               "key3": 3,
             }
    
  3. mydict = {
        "key1": 1,
        "key2": 2,
        "key3": 3,
    }
    

Я знаю, что все вышеперечисленное является синтаксически правильным, но я предполагаю, что есть один предпочтительный стиль отступов и разрывов строк для диктов Python. Что это?

Примечание. Это не проблема синтаксиса. Все вышеперечисленное является (насколько мне известно) действительными утверждениями Python и эквивалентно друг другу.

Ответы [ 6 ]

208 голосов
/ 17 июня 2011

Я использую # 3. То же самое для длинных списков, кортежей и т. Д. Не требует добавления лишних пробелов за отступы. Как всегда, будьте последовательны.

mydict = {
    "key1": 1,
    "key2": 2,
    "key3": 3,
}

mylist = [
    (1, 'hello'),
    (2, 'world'),
]

nested = {
    a: [
        (1, 'a'),
        (2, 'b'),
    ],
    b: [
        (3, 'c'),
        (4, 'd'),
    ],
}

Точно так же, вот мой предпочтительный способ включения больших строк без ввода пробелов (как если бы вы использовали многострочные строки с тройными кавычками):

data = (
    "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABG"
    "l0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEN"
    "xBRpFYmctaKCfwrBSCrRLuL3iEW6+EEUG8XvIVjYWNgJdhFjIX"
    "rz6pKtPB5e5rmq7tmxk+hqO34e1or0yXTGrj9sXGs1Ib73efh1"
    "AAAABJRU5ErkJggg=="
)
24 голосов
/ 07 декабря 2012

Прежде всего, как сказал Стивен Румбальски: «PEP8 не решает этот вопрос», так что это вопрос личных предпочтений.

Я бы использовал такой же, но не идентичный формат, как ваш формат 3Вот мое и почему.

my_dictionary = { # Don't think dict(...) notation has more readability
    "key1": 1, # Indent by one press of TAB (i.e. 4 spaces)
    "key2": 2, # Same indentation scale as above
    "key3": 3, # Keep this final comma, so that future addition won't show up as 2-lines change in code diff
    } # My favorite: SAME indentation AS ABOVE, to emphasize this bracket is still part of the above code block!
the_next_line_of_code() # Otherwise the previous line would look like the begin of this part of code

bad_example = {
               "foo": "bar", # Don't do this. Unnecessary indentation wastes screen space
               "hello": "world" # Don't do this. Omitting the comma is not good.
} # You see? This line visually "joins" the next line when in a glance
the_next_line_of_code()

btw_this_is_a_function_with_long_name_or_with_lots_of_parameters(
    foo='hello world',  # So I put one parameter per line
    bar=123,  # And yeah, this extra comma here is harmless too;
              # I bet not many people knew/tried this.
              # Oh did I just show you how to write
              # multiple-line inline comment here?
              # Basically, same indentation forms a natural paragraph.
    ) # Indentation here. Same idea as the long dict case.
the_next_line_of_code()

# By the way, now you see how I prefer inline comment to document the very line.
# I think this inline style is more compact.
# Otherwise you will need extra blank line to split the comment and its code from others.

some_normal_code()

# hi this function is blah blah
some_code_need_extra_explanation()

some_normal_code()
9 голосов
/ 17 июня 2011

Поскольку ваши ключи являются строками, а мы говорим о читабельности, я предпочитаю:

mydict = dict(
    key1 = 1,
    key2 = 2,
    key3 = 3,
)
1 голос
/ 12 октября 2016

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

Вот python-beautifier - www.cleancss.com/python-beautify, который мгновенно превращает ваши данные в настраиваемый стиль.

0 голосов
/ 17 июня 2011

Как правило, вы не включаете запятую после последней записи, но Python исправит это для вас.

0 голосов
/ 17 июня 2011

Из моего опыта с учебниками и другими вещами номер 2 всегда кажется предпочтительным, но это личный выбор предпочтений больше всего на свете.

...