列表理解多个和依赖级别

时间:2014-03-27 08:56:06

标签: python list-comprehension

我想用多个for列表理解。 为了使它更难,我有两个级别之间的依赖关系。 较高的app.containers是容器列表,它包含一些contents,也是可迭代的。

这个字典最后应该包含一些指向整个应用程序内容的指针,可以通过其名称访问,前缀为其中一个容器。

prefixed_names = {".".join(container.name, content.name): content
                  for content in container.contents
                  for container in app.containers}

Python抛出NameError,认为container未定义。

2 个答案:

答案 0 :(得分:3)

列表推导是编写嵌套for循环的便捷方式。第一个for表达式是最外面的for,因此您需要交换编写for表达式的顺序。举个例子:

>>> [ a+b for a in 'san' for b in '123' ]
['s1', 's2', 's3', 'a1', 'a2', 'a3', 'n1', 'n2', 'n3']

>>> for a in 'san':
...     for b in '123':
...             print a+b,
...
s1 s2 s3 a1 a2 a3 n1 n2 n3

答案 1 :(得分:0)

在表达中

... for content in container.contents for container in app ....

您有一个内部变量container,它将替换外部变量container。看看

... for content in container.contents for c in app ....

帮助。在这里,即使我无法在container语句中找出您想要引用的join