web-dev-qa-db-ja.com

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
Wizzard

私の好ましい方法は:

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

aaronasterlingのインデントスタイルは、私が好むものです。これと他のいくつかのスタイルは another SO Question で説明されています。特にLennart Regebroの回答は素晴らしい概要を与えました。

しかし、このスタイルは最も投票されたものでした:

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

PEP8スタイルガイド によると、辞書をフォーマットする方法は2つあります。

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

OR

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

PEP8に準拠したい場合、他のことは技術的に間違っていると思います。

16
frodopwns

好きなように辞書を定義して、これを試してください:

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
eumiro

ganeti (PEP 8に準拠)の場合、3番目のオプションを選択する必要があります。

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

私はこのESPが好きです。必要な要素をのみ選択できるためです。そして、私はどちらかの端に要素を削除または追加する方がこの方法の方が速いと感じています。

注:コメントで指摘されているように、PEPに従って、「:」(E203)の前に空白があってはなりません。

2
Jungle Hunter

間違いなくオプション1ではありません Python の強みの1つはその読みやすさです。オプション1は、その可読性を大幅に低下させます。

2と3のうち、pyfuncが両方について述べたのと同じ理由をエコーし​​ます。

ただし、私のコードでは、最初の要素が宣言行の終わりにあるために「失われる」ことがあり、コードをざっと見ただけではすぐに表示されない場合があるという理由だけで、オプション3を好みます。少しばかげているのはわかっていますが、心は神秘的な方法で働いています...

1
ianaré

私は2番目または3番目のほうを好みます。

理由:

  1. 各要素は独自の行にあります
  2. 新しい要素を追加するために行末に到達することは、テキストエディターの苦痛です
  3. 新しい要素の追加は簡単です
  4. 3番目のオプションでは、これらの行を選択することで要素の数を確認できる場合があります。ほとんどのエディターは、選択された行の数を教えてくれます。
1
pyfunc

さて、あなたの行は79文字幅でなければならないので、最初のものはノーゴーです。他の2つのオプションについては、好みの問題だと思いますが、個人的には2番目のオプションを好みます。

PEP8では特に言及されていないが、 辞書のドキュメント に記載されている次のオプションについて説明します。「キーが単純な文字列の場合、キーワード引数を使用してペアを指定する方が簡単な場合があります。 : "

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

ただし、インデントの問題は解決されません。

0
Thomas Ahle

私は2番目の方法が大好きです:

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

この投稿を読む前に、私はあなたが与える3番目のオプションを選択したでしょう。しかし今、私はTörökGáborのスタイルではないものに行くかもしれません:

my_dictionary = {1: '何か'、2: '何か他のもの'、}

しかし、正直なところ、最初のオプション以外は何でも問題ないでしょう。

0
jaydel