Python使用集合嵌套dict理解

atp*_*atp 1 python dictionary list-comprehension

有人可以解释如何做嵌套的字典理解吗?

>> l = [set([1, 2, 3]), set([4, 5, 6])]
>> j = dict((a, i) for a in s for i, s in enumerate(l))
>> NameError: name 's' is not defined
Run Code Online (Sandbox Code Playgroud)

我本来希望:

>> j
>> {1:0, 2:0, 3:0, 4: 1, 5: 1, 6: 1}
Run Code Online (Sandbox Code Playgroud)

我刚刚问了一个关于更简单的词典理解的问题,其中生成器函数中的括号减少了.怎么s没有认识到最左边的理解?

sat*_*oru 5

只需颠倒两个循环的顺序:

j = dict((a, i) for i, s in enumerate(l) for a in s)
Run Code Online (Sandbox Code Playgroud)

  • 从PEP 202(http://www.python.org/dev/peps/pep-0202/),根据BDFL:`形式[... for x ... for y ...]巢,与最后一个索引变化最快,就像嵌套for循环一样.关键不在于我们使用的是哪种类型的表达式,它是列表推导的嵌套循环语法. (3认同)