【问题标题】:Python "best formatting practice" for lists, dictionary, etc用于列表、字典等的 Python“最佳格式化实践”
【发布时间】:2011-04-28 11:39:39
【问题描述】:

我一直在查看 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',
             ...
             }

如何处理列表/字典的深度嵌套?

【问题讨论】:

    标签: python code-formatting


    【解决方案1】:

    我的首选方式是:

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

    【讨论】:

    • 对 git 不太友好,因为在第一行或最后一行更改键/值会将其他语法元素拉入变更集中。
    • 嵌套字典怎么样?
    【解决方案2】:

    aaronasterling 的缩进风格是我喜欢的。 another SO Question 中解释了这种风格以及其他几种风格。尤其是 Lennart Regebro 的回答给出了很好的概述。

    但这种风格是投票最多的风格:

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

    【讨论】:

    • 我特别喜欢 python 允许您使用逗号跟随字典、列表或元组的最后一项。这使得以后重新排序或扩展序列变得更容易。
    • @AndrewF 我必须同意。这是 JSON 唯一让我生气的事情之一,因为它拒绝处理序列中的尾随逗号。
    • 一定是 C/Java 程序员对此投票,因为他们看到了一些熟悉的东西。
    【解决方案3】:

    根据PEP8 style guide有两种方式来格式化字典:

    mydict = {
        'key': 'value',
        'key': 'value',
        ...
        }
    

    mydict = {
        'key': 'value',
        'key': 'value',
        ...
    }
    

    如果你想符合 PEP8,我会说其他任何技术上都是错误的。

    【讨论】:

      【解决方案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}
      

      你喜欢这个输出吗?

      【讨论】:

      • OP 不想知道如何打印,而是想知道如何在源代码中格式化。
      • @aaronasterling - 当然。这可以告诉他如何在他的源代码中格式化给定的结构。
      • 那么 pprint 是如何打印出来的呢?第二还是第三?
      • @Ashish - 第一个是短结构,第二个是长结构
      • 是的,因为pprint 在标准库中,它提供了一个更可取的样式,根据Zen of Python 的座右铭“应该有一个--最好只有一个--显而易见的方法。”
      【解决方案5】:

      如果您使用ganeti(尊重 PEP 8),您应该选择第三个选项。

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

      我特别喜欢这个。因为你可以只选择你想要的元素。而且我觉得这样在两端删除或添加元素会更快。

      注意:正如评论中指出的那样,根据 PEP,':' (E203) 之前不应有空格。

      【讨论】:

      • 这不符合PEP8,因为':'之前有空格(E203)。
      【解决方案6】:

      绝对不是选项 1,Python 的优势之一是它的易读性。选项 1 严重降低了可读性。

      在 2 和 3 中,我将重复 pyfunc 为两者陈述的相同原因。

      但是,在我自己的代码中,我更喜欢选项 3,因为第一个元素有时会因为位于声明行的末尾而“丢失”,并且在快速浏览代码时有时我不会立即看到它。我知道这有点傻,但大脑以神秘的方式运作......

      【讨论】:

        【解决方案7】:

        好吧,第一个是不行的,因为你的行应该只有 79 个字符宽。至于其他两个选项,我想这是一个口味问题,但我个人更喜欢第二个选项。

        【讨论】:

          【解决方案8】:

          我更喜欢第二个或第三个。

          原因:

          1. 每个元素都独占一行
          2. 到达行尾以添加新元素在文本编辑器中是一种痛苦
          3. 添加新元素很容易
          4. 使用第三个选项,有时您可以通过选择这些行来检查元素的数量。大多数编辑器会告诉您选定的行数。

          【讨论】:

          • @aaronasterling:是的,我应该写第二个和第三个选项。
          • 我不同意#2。使用能够为您提供动力而不是限制您的文本编辑器。
          【解决方案9】:

          我喜欢第二种方式:

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

          【讨论】:

            【解决方案10】:

            在阅读这篇文章之前,我会选择您给出的第三个选项。但现在我可能会选择不是 Török Gábor 的风格:

            我的字典 = { 1:“某事”, 2:'其他东西', }

            但老实说,除了你的第一个选项之外的任何东西都可能没问题。

            【讨论】:

              【解决方案11】:

              我想提一下以下选项,PEP8 中没有特别提到,但在dictionary documentation 中有说明:“当键是简单字符串时,使用关键字参数指定对有时更容易:”

              my_dict = dict(
                  foo = 1,
                  bar = 2,
                  baz = 3,
                  ...
              )
              

              然而,它并没有解决缩进问题。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-07-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-09-27
                • 1970-01-01
                相关资源
                最近更新 更多