Python 列表理解 Django 对象

Python list comprehension Django objects

我正在开发字典 Django 应用程序,其中 Definitions 有 Tags。我编写了这个通用函数来从 Definition 列表中收集所有 Tag

这是我当前的工作版本:

def get_tags(definitions):
    tags = []
    for d in definitions:
        tags += d.tags.all()
    return tags

我试图使用 Python 的列表理解来完成同样的事情:

tags = []
return [tags.extend(d.tags.all()) for d in definitions]

然而,此代码还不能正常工作。我错过了什么?

是否有一种更巧妙的方法可以在不创建标签变量的情况下仅在一行中执行此操作,也许使用 yield 语句?

您需要遍历所有元素 d.tags.all(),因此需要一个嵌套列表 comp:

tags = [t for d in definitions for t in d.tags.all()]

这只是列表理解版本:

tags = []
for d in definitions:
    for t in d.tags.all():
        tags.append(t)