2012-06-14 16 views
6

Esta es solo una pregunta trivial sobre qué convención sugieres. Recientemente, he visto muchos ejemplos de personas escribiendo dict(key1=val1, key2=val2) en lugar de lo que creo que es el más idiomático {"key1": val1, "key2": val2}. Creo que la razón es evitar el uso de "" para las claves, pero no estoy seguro. ¿Tal vez la sintaxis dict() se parece más a otros idiomas?¿Debo escribir dict o {} en Python al construir un diccionario con claves de cadena?

+1

no es genial, hay más de una manera obvia de hacerlo – wim

+1

Una ventaja obvia de la versión '{}' es que si luego decides usar algunas teclas que no sean cadenas, no tienes que volver a escribir toda la linea – James

+0

Para estar seguro, siempre puedes combinar los dos: una especie de enfoque de "cinturón y abrazaderas": '' kwargs = {"key1": "val1", "key2": "val2"}; d = dict (** kwargs) ''. – Blair

Respuesta

5

Voy a ir contra la corriente aquí:

utilizar el método de dict() si te conviene, pero mantener las limitaciones señaladas en otras respuestas en mente. Hay algunas ventajas de este método:

  • se ve menos desordenada en algunas circunstancias
  • Es 3 caracteres menos por par clave-valor
  • En las disposiciones de teclado, donde { y } son torpes para escribir (AltGr- 7 y AltGr-0 aquí) es más rápido escribir
+0

Obviamente no hay una respuesta correcta aquí, pero me gusta la tuya mejor.Creo que SO tiene una desafortunada tendencia a votar automáticamente los comentarios de los usuarios con mayor reputación. – Gurgeh

2

Definitivamente, utilizar {}, mantenga simple código & tipo menos es siempre mi objetivo

+4

Bueno, aquí no puedes tener ambas cosas. Para dos o más teclas, el método 'dict()' significará menos tipeo: dos comillas y un carácter de espacio menos por par de clave-valor, si sigue las recomendaciones PEP8. –

8

{"key1": val1, "key2": val2} es más idiomática; Casi nunca me encuentro con dict con argumentos de palabra clave y ciertamente nunca he tenido la tentación de escribirlo. También es más general, porque los argumentos de palabras clave tienen que ser identificadores Python:

>>> {"foo bar": 1} 
{'foo bar': 1} 
>>> dict(foo bar=1) 
------------------------------------------------------------ 
    File "<ipython console>", line 1 
    dict(foo bar=1) 
       ^
SyntaxError: invalid syntax 

>>> dict("foo bar"=1) 
------------------------------------------------------------ 
    File "<ipython console>", line 1 
SyntaxError: keyword can't be an expression (<ipython console>, line 1) 
+1

Hay casos en que Python usa palabras donde otros idiomas usan signos de puntuación. Produce menos ruido de línea. 'dict()' podría ser más legible cuando se puede usar (Obviamente no se puede usar si las claves no son identificadores de Python válidos, en ese caso no hay duda de qué usar). – jfs

1

Existe cierta ambigüedad con las llaves {}. Considere:

>>> x = {'one','two','three'} 
>>> type(x) 
<type 'set'> 
>>> x = {} 
>>> type(x) 
<type 'dict'> 

Mientras que no hay ambigüedad con el uso de set() o dict().

+0

Buen punto, pero esto es muy poco importante si tenemos en cuenta los otros puntos que se han hecho. – jamylak

Cuestiones relacionadas