web-dev-qa-db-fra.com

"Meilleure pratique de formatage" en Python pour les listes, les dictionnaires, etc.

J'ai examiné la documentation sur Python pour connaître les meilleures pratiques de formatage de code pour les grandes listes et les dictionnaires, par exemple,

something = {'foo' : 'bar', 'foo2' : 'bar2', 'foo3' : 'bar3'..... 200 chars wide, etc..}

ou

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

ou

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

Comment gérer l'imbrication profonde de listes/dictionnaires?

29
Wizzard

Ma manière préférée est:

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

le style d'indentation de aaronasterling est ce que je préfère. Ceci, ainsi que plusieurs autres styles, sont expliqués dans un autre SO Question . Surtout, la réponse de Lennart Regebro a donné un bon aperçu.

Mais ce style a été le plus voté:

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

Selon le guide de style PEP8 , il existe deux manières de formater un dictionnaire:

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

OR

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

Si vous voulez vous conformer à PEP8, je dirais que tout le reste est techniquement faux.

16
frodopwns

Définissez votre dictionnaire comme vous le souhaitez, puis essayez ceci:

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}

Aimez-vous la sortie?

5
eumiro

Si vous passez par ganeti (ce qui respecte PEP 8), vous devriez choisir la troisième option.

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

J'aime cette esp. car vous pouvez sélectionner uniquement les éléments souhaités. Et je pense que supprimer ou ajouter des éléments à l'une ou l'autre extrémité est plus rapide de cette façon.

Remarque: Comme indiqué dans le commentaire, il ne doit y avoir aucun espace avant ":" (E203) selon PEP.

2
Jungle Hunter

Certainement PAS l'option 1, une des forces de Python est sa lisibilité. L'option 1 diminue considérablement cette lisibilité.

Sur 2 et 3, je ferai écho aux mêmes raisons que pyfunc a énoncées pour les deux.

Cependant, dans mon propre code, je préfère l'option 3 simplement parce que le premier élément est parfois "perdu" en étant à la fin de la ligne de déclaration, et en jetant un coup d'œil rapide sur le code, je ne la vois pas immédiatement. Je sais que c'est un peu bête, mais l'esprit fonctionne de manière mystérieuse ...

1
ianaré

Je préfère le deuxième ou le troisième.

Raison:

  1. Chaque élément est sur sa propre ligne
  2. Atteindre la fin de la ligne pour ajouter un nouvel élément est un problème pour un éditeur de texte
  3. Ajouter un nouvel élément est facile
  4. Avec la troisième option, vous pouvez parfois vérifier le nombre d'éléments en sélectionnant ces lignes. La plupart des éditeurs vous diront le nombre de lignes sélectionnées.
1
pyfunc

Eh bien, le premier est interdit, car vos lignes ne doivent avoir que 79 caractères de large. En ce qui concerne les deux autres options, je suppose que c'est une question de goût, mais je préfère personnellement la deuxième option.

1

Je souhaite mentionner l’option suivante, qui n’est pas spécifiquement mentionnée dans le PEP8, mais mentionnée dans la documentation du dictionnaire : "Lorsque les clés sont des chaînes simples, il est parfois plus facile de spécifier des paires à l’aide d’arguments de mots clés:"

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

Cela ne règle toutefois pas la question de l'indentation.

0
Thomas Ahle

J'aime la deuxième façon:

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

Avant de lire ce post, j'aurais opté pour la troisième option que vous donnez. Mais maintenant, je pourrais choisir celui qui n'est pas du style de Török Gábor:

my_dictionary = {1: 'quelque chose', 2: 'une autre chose',}

Mais honnêtement, quelque chose en dehors de votre première option est probablement bien.

0
jaydel