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

j'ai cherché la documentation Python pour le formatage de code meilleures pratiques pour les grandes listes et 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?

28
demandé sur Cœur 2010-10-21 12:27:22

11 réponses

ma méthode préférée est:

something = {'foo': 'bar',
             'foo2': 'bar2',
             'foo3': 'bar3',
             ...
             'fooN': 'barN'}
34
répondu aaronasterling 2010-10-21 08:44:54

le style d'indentation d'aaronasterling est ce que je préfère. Ceci, et plusieurs autres styles sont expliqués dans une autre Question de SO . En particulier la réponse de Lennart Regebro a donné une belle vue d'ensemble.

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

my_dictionary = {
    1: 'something',
    2: 'some other thing',
}
26
répondu danlei 2017-05-23 11:54:50

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

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

ou

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

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

14
répondu frodopwns 2013-08-09 21:48:59

Définissez votre dictionnaire de la façon que vous voulez et 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
répondu eumiro 2010-10-21 12:10:38

si vous allez par ganeti (qui respecte PEP 8) vous devez choisir la troisième option.

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

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

Note: comme indiqué dans le commentaire, il ne devrait pas y avoir de blanc avant": "(E203) selon PEP.

2
répondu Jungle Hunter 2010-10-21 09:09:47

Eh bien, le premier est un no-go, puisque vos lignes ne devraient 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
répondu Klaus Byskov Pedersen 2010-10-21 08:31:32

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 ligne pour ajouter un nouvel élément est une douleur dans 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 indiqueront le nombre de lignes sélectionnées.
1
répondu pyfunc 2013-01-01 18:25:21

certainement pas l'option 1, l'une des forces de Python est sa lisibilité. L'Option 1 réduit considérablement cette lisibilité.

sur 2 et 3, je vais faire écho aux mêmes raisons pyfunc déclaré 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 regardant rapidement le code, parfois je ne le verrai pas immédiatement. Je sais c'est un peu idiot, mais l'esprit fonctionne de façon mystérieuse ...

1
répondu ianaré 2013-01-01 18:27:04

j'adore la deuxième façon:

something = {'foo' : 'bar',
         'foo2' : 'bar2',
         'foo3' : 'bar3',
         ...
         'fooN': 'barN'}
0
répondu kasx93 2010-10-21 11:45:04

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 le style de Török Gábor:

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

mais honnêtement, tout sauf votre première option est probablement très bien.

0
répondu jaydel 2010-10-21 14:20:01

je veux mentionner l'option suivante, qui n'est pas spécifiquement mentionnée dans le PEP8, mais qui est noté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 en utilisant des arguments de mots clés: "

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

il ne règle pas la question de l'indentation, cependant.

0
répondu Thomas Ahle 2018-07-13 09:53:13