Estoy haciendo un esfuerzo para aprender Python, y estoy prestando mucha atención a los estándares de codificación comunes. Esto puede parecer una pregunta inútilmente quisquillosa, pero estoy tratando de centrarme en las mejores prácticas a medida que aprendo, por lo que no tengo que desaprender ningún hábito "malo".
Veo dos métodos comunes para inicializar un dict:
a = {
'a': 'value',
'another': 'value',
}
b = dict(
a='value',
another='value',
)
¿Cuál se considera "más pitónico"? Cual usas ¿Por qué?
python
dictionary
daotoad
fuente
fuente
{}
bastante uniforme, pero veo mucho deldict()
enfoque explícito en otros lugares. Pude ver el beneficio de una sintaxis explícita, pero la ausencia del enfoque en los documentos oficiales me hizo sospechar. Después de publicar esto, miré los documentos de la bibliotecadict
y encontré la advertencia de que las claves deben ser identificadores válidos cuandodict
se usa un explícito para inicializar un dict.dict()
se deletrea,dict
usa el nombre del tipo. Las llaves ({}
) se basan en la puntuación para identificar el tipo.Respuestas:
Tirantes rizados. Al pasar argumentos de palabras clave
dict()
, aunque funciona muy bien en muchos escenarios, solo puede inicializar un mapa si las claves son identificadores válidos de Python.Esto funciona:
Esto no funcionará:
fuente
El primero, llaves. De lo contrario, tiene problemas de coherencia con las teclas que tienen caracteres extraños, como
=
.fuente
La primera versión es preferible:
{1: 'one', 2: 'two'}
. La segunda variante solo funciona para (algunas) teclas de cadena. Usar diferentes tipos de sintaxis dependiendo del tipo de las claves sería una inconsistencia innecesaria.Es mas rapido:
fuente
Creo que la primera opción es mejor porque vas a acceder a los valores como ['a'] u ['otro']. Las claves en su diccionario son cadenas, y no hay razón para fingir que no lo son. Para mí, la sintaxis de palabras clave parece inteligente al principio, pero oscura en una segunda mirada. Esto solo tiene sentido para mí si está trabajando
__dict__
, y las palabras clave se convertirán en atributos más tarde, algo así.fuente
Para su información, en caso de que necesite agregar atributos a su diccionario (cosas que están adjuntas al diccionario, pero no son una de las claves), necesitará la segunda forma. En ese caso, puede inicializar su diccionario con teclas que tengan caracteres arbitrarios, uno a la vez, de esta manera:
fuente
A veces
dict()
es una buena opción:[random.randint (0,100) para x en el rango (0,7)]))
fuente
Casi siempre uso llaves; sin embargo, en algunos casos donde escribo pruebas, hago el empaquetado / desempaquetado de palabras clave, y en estos casos dict () es mucho más fácil de mantener, ya que no necesito cambiar:
a:
También ayuda en algunas circunstancias en las que creo que podría querer convertirlo en una instancia de clase o tupla con nombre más adelante.
En la implementación en sí, debido a mi obsesión por la optimización, y cuando no veo un beneficio de mantenimiento particularmente grande, siempre favoreceré las llaves.
En las pruebas y la implementación, nunca usaría dict () si existe la posibilidad de que las claves agregadas en ese momento, o en el futuro,:
dict(1foo=2)
genera un SyntaxError)fuente