Python 嵌套列表或集合理解的正确语法

Python 嵌套列表或集合理解的正确语法,python,set,list-comprehension,Python,Set,List Comprehension,想象一下这个物体: my_obj = { 'Episodes' : [ {'Tags' : ['one','two','three']}, {'Tags' : ['three','four','five']} ] } 我想创建一组标记: tags = set(tag for tag in e['Tags'] for e in my_obj['Episodes']) 但是,它不起作用,因为未定义e。我该怎么做 ta

想象一下这个物体:

my_obj = {
    'Episodes' : [
        {'Tags' : ['one','two','three']},
        {'Tags' : ['three','four','five']}
            ]
        }
我想创建一组标记:

tags = set(tag for tag in e['Tags'] for e in my_obj['Episodes'])
但是,它不起作用,因为未定义
e
。我该怎么做

tags = set(tag  for e in my_obj['Episodes'] for tag in e['Tags'])

您需要更改顺序并首先获取e…:)

我用来避免被这些嵌套理解弄糊涂的技巧是按循环在理解中出现的顺序展开循环

因此,在您的示例中,您有一个:

e中标签的标签['Tags']e中标签的标签在my_obj['Spices']

你可以像这样把它扩展成双循环:

for tag in e['Tags']:
  for e in my_obj['Episodes']:
    yield tag
现在,通过这种结构,您可以非常清楚地看到错误所在,
e
未定义,并且可以看到它应该是:

for e in my_obj['Episodes']:
  for tag in e['Tags']:
    yield tag 
它会折叠回到嵌套的理解中

在my_obj['Spices']中为e添加标签在e['Tags']中添加标签


正如您已经从前面的答案中看到的。希望这有帮助

请看,它还处理嵌套列表理解语法,其他问题比我的问题长50倍,也比我的问题复杂。如果我在寻找这个问题的答案,我知道我更愿意消化哪一个。没有不尊重!