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

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 nesteds de izquierda a derecha, for r in a[g] lo que for r in a[g] es el bucle externo y se ejecuta primero. Cambia los bucles

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

Ahora g se define para el siguiente bucle, 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]