2010-10-21 14 views
26

he estado mirando por encima de la documentación Python para el código de formato a las mejores prácticas para grandes listas y diccionarios, por ejemplo,Python "mejores prácticas de formato" para las listas, diccionario, etc.

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

o

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

o

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

¿Cómo manejo profundo de anidación de listas/diccionarios?

Respuesta

32

Mi forma preferida es:

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

+1 se ajusta a PEP8. –

+3

Ligeramente menos amigable para los git que las claves/valores cambiantes de la primera o la última línea incorporen otros elementos de sintaxis en el conjunto de cambios. –

1

Prefiero el segundo o el tercero.

Motivo:

  1. Cada elemento está en su propia línea
  2. Llegar al final de la línea para añadir un nuevo elemento es un dolor en un editor de texto
  3. Adición de un nuevo elemento es fácil
  4. Con la tercera opción, a veces puede verificar el número de elementos seleccionando esas líneas. La mayoría de los editores le dirán el número de líneas seleccionadas.
+0

# 4 funciona también con la segunda opción. – aaronasterling

+0

@aaronasterling: Sí, debería haber escrito la segunda y tercera opción. – pyfunc

+0

No estoy de acuerdo con el n. ° 2. Utiliza un editor de texto que te dé poder y no te restrinja. –

1

Bueno, el primero es un no-go, ya que sus líneas solo deben tener 79 caracteres de ancho. Con respecto a las otras dos opciones, supongo que es una cuestión de gusto, pero personalmente prefiero la segunda opción.

5

definir su diccionario en cualquier forma que desee y luego probar esto:

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} 

¿Le gusta el resultado?

+0

OP no quiere saber cómo imprimirlo sino cómo formatearlo en el código fuente. – aaronasterling

+0

@aaronasterling - por supuesto. Esto puede mostrarle cómo formatear una estructura dada en su código fuente. – eumiro

+1

Entonces, ¿cómo imprime pprint? ¿segundo o tercero? –

1

Definitivamente no es la opción 1, una de las fortalezas de Python es su legibilidad. La opción 1 disminuye severamente esa legibilidad.

De 2 y 3, repetiré las mismas razones que pyfunc estableció para ambos.

Sin embargo, en mi propio código prefiero la opción 3 simplemente porque el primer elemento a veces se 'pierde' al estar al final de la línea de declaración, y al echar un vistazo rápido al código algunas veces no lo veo de inmediato. Sé que es un poco tonto, pero la mente funciona de manera misteriosa ...

2

Si pasas por ganeti (que respeta PEP 8) debes elegir la tercera opción.

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

Me gusta este esp. porque puede seleccionar solo los elementos que desee. Y siento que eliminar o agregar elementos a cualquiera de los extremos es más rápido de esta manera.

Nota: Como se señala en el comentario, no debe haber espacios en blanco antes de ':' (E203) según PEP.

+0

Esto no se ajusta a PEP8 porque hay espacios en blanco antes de ':' (E203). –

+0

@ Török Gábor: copiar pegar error: P –

+0

enlace "ganeti" no funciona :( –

24

estilo de sangría de aaronasterling es lo que prefiero.Esto y varios otros estilos se explican en another SO Question. Especialmente la respuesta de Lennart Regebro dio una buena descripción.

Pero este estilo fue el más votado por:

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

Ese no es mi estilo :) –

+4

Me gusta especialmente que python te permita seguir el último elemento de un diccionario, lista o tupla con un coma. Esto hace que sea más fácil reordenar o extender la secuencia más tarde. – AndrewF

+2

@AndrewF Debo estar de acuerdo. Esa es una de las únicas cosas por las que JSON me enoja, al rechazar manejar una coma al final en secuencias. –

0

Me encanta la segunda manera:

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

Antes de leer este post me he decantado por la tercera opción que das. Pero ahora yo podría ir para el que no es el estilo de Török Gábor:

my_dictionary = { 1: 'algo', 2: 'otra cosa', }

pero honestamente nada aparte de su La primera opción probablemente sea buena.

9

De acuerdo con la PEP8 style guide hay dos formas de formatear un diccionario:

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

O

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

Si desea ajustarse a PEP8 Yo diría que cualquier otra cosa es técnicamente incorrecto.

Cuestiones relacionadas