valor resueltos recorrer lista funcion elementos ejercicios dict diccionarios diccionario dentro convertir buscar agregar python dictionary

python - resueltos - ¿Cuál es la sintaxis preferida para inicializar un dict: literales llaves{} o la función dict()?



lista dentro de un diccionario python (6)

Algunas veces dict() es una buena opción:

a=dict(zip([''Mon'',''Tue'',''Wed'',''Thu'',''Fri''], [x for x in range(1, 6)])) mydict=dict(zip([''mon'',''tue'',''wed'',''thu'',''fri'',''sat'',''sun''],

[random.randint (0,100) para x en el rango (0,7)]))

Estoy esforzándome por aprender Python, y estoy prestando mucha atención a los estándares comunes de codificación. Esto puede parecer una pregunta inútil y quisquillosa, pero estoy tratando de centrarme en las mejores prácticas a medida que aprendo, para no tener que desaprender ningún "mal" hábito.

Veo dos métodos comunes para inicializar un dict:

a = { ''a'': ''value'', ''another'': ''value'', } b = dict( a=''value'', another=''value'', )

¿Cuál es considerado como "más pitónico"? ¿Cuál usas? ¿Por qué?


Creo que la primera opción es mejor porque vas a acceder a los valores como [''a''] o [''otro'']. Las claves en su diccionario son cadenas, y no hay ninguna razón para pretender que no lo son. Para mí, la sintaxis de la palabra clave parece inteligente al principio, pero oscura en un segundo vistazo. Esto solo tiene sentido para mí si está trabajando con __dict__ , y las palabras clave se convertirán en atributos más adelante, algo así.


El primero, llaves. De lo contrario, se encontrará con problemas de coherencia con las claves que tienen caracteres impares en ellas, como = .

# Works fine. a = { ''a'': ''value'', ''b=c'': ''value'', } # Eeep! Breaks if trying to be consistent. b = dict( a=''value'', b=c=''value'', )


FYI, en caso de que necesite agregar atributos a su diccionario (elementos que están adjuntos al diccionario, pero no son una de las claves), entonces necesitará el segundo formulario. En ese caso, puede inicializar su diccionario con claves que tengan caracteres arbitrarios, de a uno por vez, así:

class mydict(dict): pass a = mydict() a["b=c"] = ''value'' a.test = False


La primera versión es preferible:

  • Funciona para todo tipo de claves, por lo que puede, por ejemplo, decir {1: ''one'', 2: ''two''} . La segunda variante solo funciona para (algunas) claves de cadena. Usar diferentes tipos de sintaxis dependiendo del tipo de claves sería una incoherencia innecesaria.
  • Es mas rapido:

    $ python -m timeit "dict(a=''value'', another=''value'')" 1000000 loops, best of 3: 0.79 usec per loop $ python -m timeit "{''a'': ''value'',''another'': ''value''}" 1000000 loops, best of 3: 0.305 usec per loop

  • Si la sintaxis especial para los literales del diccionario no estaba destinada a ser utilizada, probablemente no existiría.

Llaves rizadas Al pasar los argumentos de palabra clave a dict() , aunque funciona muy bien en muchos escenarios, solo se puede inicializar un mapa si las claves son identificadores de Python válidos.

En otras palabras, no puede hacer:

a = {''import'': ''trade'', 1: 7.8}