2010-10-21 53 views
26

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

如何處理列表/字典的深層嵌套?

回答

32

我的首選方法是:

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

+1它符合PEP8。 – 2010-10-21 09:07:54

+3

稍小一點的git友好性在於,第一行或最後一行上的改變鍵/值將其他語法元素拉入到變更集中。 – 2014-04-01 21:31:12

1

我更喜歡第二或第三個。

原因:

  1. 每一個元素都是在自己的行
  2. 到達結束行添加新的元素在文本編輯器
  3. 添加新元素的痛苦是容易
  4. 有了第三個選項,有時可以通過選擇這些行來檢查元素的數量。大多數編輯會告訴你選擇的行數。
+0

#4也適用於第二個選項。 – aaronasterling 2010-10-21 08:43:15

+0

@aronasterling:是的,我應該寫第二個和第三個選項。 – pyfunc 2010-10-21 08:49:43

+0

我不同意#2。使用一個強大的文本編輯器,而不是限制你。 – 2010-10-21 09:14:10

1

那麼,第一個是不行,因爲你的行應該只有79個字符寬。關於其他兩種選擇,我認爲這是一個品味問題,但我個人更喜歡第二種選擇。

5

定義你的字典在任何你想要的,然後試試這個:

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} 

你喜歡的輸出?

+0

OP不想知道如何打印,但如何在源代碼中對其進行格式化。 – aaronasterling 2010-10-21 08:45:44

+0

@aaronasterling - 當然。這可以向他展示如何在源代碼中格式化給定的結構。 – eumiro 2010-10-21 08:46:56

+1

那麼如何打印出pprint?第二還是第三? – 2010-10-21 08:59:00

1

絕對不是選項1 Python的長處之一是它的可讀性。備選方案1嚴重削弱了可讀性。

在2和3中,我會迴應pyfunc爲兩者說明的相同原因。

但是,在我自己的代碼中,我更喜歡選項3,因爲第一個元素有時會因爲位於聲明行末尾而「丟失」,並且在快速瀏覽代碼時有時候我不會立即看到它。我知道這有點愚蠢,但頭腦以神祕的方式工作......

2

如果你走ganeti(它尊重PEP 8),你應該選擇第三個選項。

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

我喜歡這樣的esp。因爲你可以選擇只有你想要的元素。而且我覺得從兩端移除或添加元素的速度會更快。

注意:正如在註釋中指出的那樣,根據PEP在':'(E203)之前不應該有空格。

+0

這不符合PEP8,因爲':'之前有空格(E203)。 – 2010-10-21 09:05:46

+0

@TörökGábor:複製粘貼錯誤:P – 2010-10-21 09:10:33

+0

「ganeti」鏈接不工作:( – 2016-09-26 07:40:22

24

aaronasterling的縮進樣式是我喜歡的。這和其他幾種風格在another SO Question中解釋。特別是Lennart Regebro的回答給出了一個很好的概述。

但這種風格是一個最投票:

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

這不是我的風格:) – 2010-10-21 11:06:53

+4

我特別喜歡python允許你跟隨字典,列表或元組的最後一項逗號。這使得重新排序或稍後擴展序列變得更容易。 – AndrewF 2010-10-21 11:45:35

+2

@AndrewF我必須同意。這是JSON讓我生氣的唯一原因之一,就是拒絕按順序處理尾隨的逗號。 – 2010-10-21 11:48:49

0

我喜歡第二種方式:

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

上閱讀這篇文章,我會選擇了你給的第三個選項。但現在我會去爲一個不是Török的Gabor的風格:

my_dictionary = { 1:「東西」, 2:「其他一些東西」, }

但說實話東西除了你第一個選擇可能是好的。

9

按照PEP8 style guide有兩種方法格式化詞典:

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

OR

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

如果要符合PEP8我會說別的是技術上的錯誤。