所以我目前正在使用mongoengine,虽然任何具有属性的东西都会有相同的行为。
我有一个名为集合的列表。从技术上讲,它是一个mongoengine QuerySet,它是一个可迭代的,但它实际上与列表具有相同的行为。
每个元素集合都是一个对象,其属性名为 addons ,也是一个列表。
我想创建所有插件的平面列表。目前这样做会产生预期的结果
addons = []
for col in collections:
addons+=col.addons
但是当我尝试这个时,我假设是等同的列表理解,我得到一个列表列表(它基本上将每个列表附加在一起而不是添加它们)
addons = [col.addons for col in collections]
我一直在阅读有关嵌套列表理解甚至使用itertools的内容,但还未能弄清楚如何正常工作
答案 0 :(得分:1)
你需要双重列表理解,例如:
addons = [item for item in col.addons for col in collections]
答案 1 :(得分:1)
你可以这样使用itertools.chain.from_iterable:
from itertools import chain
addons = list(chain.from_iterable(col.addons for col in collections))
适用于Python> = 2.6。在过去,它一直很快。甚至比双重列表理解还要快。