django zip不平等列表

时间:2018-07-23 11:59:36

标签: python django list zip

我有2个查询,您可以找到以下打印结果。

<QuerySet [{'swtype': 1}, {'swtype': 2}]>
 <QuerySet ['201;203;205', '207;208']>

我在stackoverflow上查看了一些命令,用于按以下方式配对这些列表。

pair = itertools.zip_longest(swtype, p_list)

但是输出不是我想要的。就像

1:201
2:203
none:205
none:207
none:208

我所追求的是:

1:201
none:203
none:205
2:207
none:208

可以通过压缩还是应该创建2个单独的循环。 如果我创建了2个单独的循环,而我遇到了其他问题。

1 个答案:

答案 0 :(得分:2)

我认为您对第二个查询集进行了一些处理,以分号(;)将其拆分为子字符串。这样做的问题是结构丢失了,因此zip就好像它们总是独立的元素一样。但是,您可以保留结构,并使用:

from itertools import chain, zip_longest

qs1 = [{'swtype': 1}, {'swtype': 2}]  # first queryset
qs2 = ['201;203;205', '207;208']      # second queryset

result = chain.from_iterable(
    zip_longest((qi1['swtype'],), qi2.split(';')) for qi1, qi2 in zip(qs1, qs2)
)

因此,我们在这里遍历两个 querysets qi1qi2,然后在zip_longest上执行qi1[swtype](包装成一个 singleton元组,因为我们需要一个可迭代的对象,因此我们将qi2的字符串分成qi2.split(';')的子字符串)。然后,我们一起chain将“ subzips ”。

但是请注意,如果两个查询集源自相似的查询,我建议您将两个查询合并为一个。这样比较安全,因为可以保证顺序匹配,而且通常(有些例外)它也更有效。