Iak*_*dov 10 python list-comprehension
我正在尝试解压缩复杂的字典,并且我正在NameError使用多个循环获取列表理解表达式:
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
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 13
你的循环顺序混乱了; 它们被认为是嵌套的由左到右,所以for r in a[g]是外循环和第一执行.换掉循环:
print [r['n'] for g in good for r in a[g]]
Run Code Online (Sandbox Code Playgroud)
现在g定义为下一个循环,for r in a[g]表达式不再引发异常:
>>> 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]
Run Code Online (Sandbox Code Playgroud)