简体   繁体   English

"在 Python 中格式化多行 dict 的正确方法是什么?"

[英]What is the proper way to format a multi-line dict in Python?

In Python, I want to write a multi-line dict in my code.在 Python 中,我想在我的代码中编写一个多行字典。 There are a couple of ways one could format it.有几种方法可以格式化它。 Here are a few that I could think of:以下是我能想到的一些:

  1.  mydict = { "key1": 1, "key2": 2, "key3": 3, }<\/code><\/pre><\/li>
  2.  mydict = { "key1": 1, "key2": 2, "key3": 3, }<\/code><\/pre><\/li>
  3.  mydict = { "key1": 1, "key2": 2, "key3": 3, }<\/code><\/pre><\/li><\/ol>

    I know that any of the above is syntactically correct, but I assume that there is one preferred indentation and line-break style for Python dicts.我知道以上任何一个在语法上都是正确的,但我假设 Python dicts 有一种首选的缩进和换行样式。 What is it?它是什么?

    Note: This is not an issue of syntax.注意:这不是语法问题。 All of the above are (as far as I know) valid Python statements and are equivalent to each other.以上所有内容(据我所知)都是有效的 Python 语句,并且彼此等价。

    "

I use #3.我使用#3。 Same for long lists, tuples, etc. It doesn't require adding any extra spaces beyond the indentations.对于长列表、元组等也是如此。它不需要在缩进之外添加任何额外的空格。 As always, be consistent.一如既往,保持一致。

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

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

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

Similarly, here's my preferred way of including large strings without introducing any whitespace (like you'd get if you used triple-quoted multi-line strings):同样,这是我在不引入任何空格的情况下包含大字符串的首选方法(就像使用三引号多行字符串时所得到的那样):

data = (
    "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABG"
    "l0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEN"
    "xBRpFYmctaKCfwrBSCrRLuL3iEW6+EEUG8XvIVjYWNgJdhFjIX"
    "rz6pKtPB5e5rmq7tmxk+hqO34e1or0yXTGrj9sXGs1Ib73efh1"
    "AAAABJRU5ErkJggg=="
)

First of all, like Steven Rumbalski said, "PEP8 doesn't address this question", so it is a matter of personal preference.首先,就像 Steven Rumbalski 所说,“PEP8 没有解决这个问题”,所以这是个人喜好的问题。

I would use a similar but not identical format as your format 3. Here is mine, and why.我会使用与您的格式 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()

Since your keys are strings and since we are talking about readability, I prefer :由于您的键是字符串并且因为我们在谈论可读性,所以我更喜欢:

mydict = dict(
    key1 = 1,
    key2 = 2,
    key3 = 3
)

Usually, if you have big python objects it's quite hard to format them.通常,如果您有大型 Python 对象,则很难对其进行格式化。 I personally prefer using some tools for that.我个人更喜欢为此使用一些工具。

Here is python-beautifier - www.cleancss.com/python-beautify that instantly turns your data into customizable style.这是python-beautifier - www.cleancss.com/python-beautify可以立即将您的数据转换为可定制的样式。

dict(rank = int(lst[0]),
                grade = str(lst[1]),
                channel=str(lst[2])),
                videos = float(lst[3].replace(",", " ")),
                subscribers = float(lst[4].replace(",", "")),
                views = float(lst[5].replace(",", "")))

flake8 – a utility for enforcing style consistency in python code, which checks your code syntax and provide instructions to improve it – recommends this format (see https:\/\/www.flake8rules.com\/rules\/E133.html<\/a> ): flake8——一个用于在 python 代码中强制样式一致性的实用程序,它检查你的代码语法并提供改进它的指令——推荐这种格式(参见https:\/\/www.flake8rules.com\/rules\/E133.html<\/a> ):

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

根据我的教程经验,第二项似乎总是首选,但它是个人偏好的选择,而不是其他任何事情。

通常,您不会在最后一个条目后包含逗号,但 Python 会为您更正。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM