python list-comprehension

python - El nombre no está definido en una lista de comprensión con múltiples bucles



list-comprehension (1)

Estoy tratando de descomprimir un diccionario complejo y NameError un NameError en una expresión de comprensión de lista usando múltiples bucles:

a={ 1: [{''n'': 1}, {''n'': 2}], 2: [{''n'': 3}, {''n'': 4}], 3: [{''n'': 5}], } good = [1,2] print [r[''n''] for r in a[g] for g in good] # NameError: name ''g'' is not defined


Tienes el orden de tus bucles mezclados; se consideran anidados de izquierda a derecha, for r in a[g] lo que for r in a[g] es el bucle externo y se ejecuta primero. Intercambia los bucles:

print [r[''n''] for g in good for r in a[g]]

Ahora g está definido para el siguiente ciclo, for r in a[g] , y la expresión ya no genera una excepción:

>>> a={ ... 1: [{''n'': 1}, {''n'': 2}], ... 2: [{''n'': 3}, {''n'': 4}], ... 3: [{''n'': 5}], ... } >>> good = [1,2] >>> [r[''n''] for g in good for r in a[g]] [1, 2, 3, 4]