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]