try syntaxerror sentencias invalid hacer errores error ejemplos e0001 comunes como catch capturar python python-3.x list-comprehension

syntaxerror - Error de sintaxis simple en Python si no es la comprensión dict



sentencias en python (4)

Esto debería solucionar tu problema:

>>> dict((k, d.get(k, 0)) for k in s) {''a'': 0, ''c'': 0, ''b'': 5}

Tengo un conjunto y diccionario y un valor = 5

v = s = {''a'', ''b'', ''c''} d = {''b'':5 //<--new value}

Si la clave ''b'' en el diccionario d, por ejemplo, está en el conjunto s, quiero hacer que ese valor sea igual al nuevo valor cuando devuelvo una comprensión dict o 0 si la clave en el conjunto s no está en el diccionario d. Este es mi código para hacerlo donde s [''b''] = 5 y mi nuevo diccionario es ...

{''a'':0, ''b'':5, ''c'':0}

Escribí una comprensión dict

{ k:d[k] if k in d else k:0 for k in s} ^ SyntaxError: invalid syntax

¡¿Por qué?! Estoy tan furioso que no funciona. Así es como lo haces si no en python ¿no?

Lo siento todos. Para aquellos que visitaron esta página puse originalmente {k: d [k] si k en v else k: 0 para k en v} y s [''b''] = 5 era solo una representación de que el nuevo diccionario que creé tendría una clave ''b'' que equivale a 5, pero no es correcto porque no puede iterar un conjunto como ese.

Entonces, para reiterar, v y s son iguales. Solo significan vector y conjunto.


No puede usar una expresión ternaria if para un par nombre: valor, porque un par nombre: valor no es un valor.

Puede usar una expresión if para el valor o la clave por separado, que parece ser exactamente lo que quiere aquí:

{k: (d[k] if k in v else 0) for k in v}

Sin embargo, esto es un poco tonto. Lo estás haciendo for k in v , entonces cada k está en v por definición. Quizás quisiste esto:

{k: (d[k] if k in v else 0) for k in d}


In [82]: s = {''a'', ''b'', ''c''} In [83]: d = {''b'':5 } In [85]: {key: d.get(key, 0) for key in s} Out[85]: {''a'': 0, ''b'': 5, ''c'': 0}


La forma expandida de lo que estás tratando de lograr es

a = {} for k in v: a[k] = d[k] if k in d else 0

donde d[k] if k in d else 0 es la versión Python del operador ternario . ¿Ver? Necesitas soltar k: de la parte derecha de la expresión:

{k: d[k] if k in d else 0 for k in v} # ≡ {k: (d[k] if k in d else 0) for k in v}

Puedes escribirlo concisamente como

a = {k: d.get(k, 0) for k in d}