python - 名称未在具有多个循环的列表理解中定义

标签 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

最佳答案

你的循环顺序搞混了;它们被认为是从左到右嵌套的,因此 for r in a[g]outer 循环并首先执行。交换循环:

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

现在 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]

关于python - 名称未在具有多个循环的列表理解中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35479600/

相关文章:

Python - 列表映射

python - 如何替换 pandas 数据框中看起来相似的值?

Python - 访问 protected 网络资源

python - 使带有循环的Python代码块更快

python - Python 中的嵌套列表理解

python - 用列表列表中的第一个元素制作字典

python - 如何编写 python 脚本来连接 AngularJS 和 mysql 数据库?

python - 登录后重定向只需附加 LOGIN_REDIRECT_URL

python - Windows错误: [Error 3] The system cannot find the path specified?

python - 计算两个列表中数字的出现次数并返回一个列表