代码之家  ›  专栏  ›  技术社区  ›  ahmet

Django-Zip不平等列表

  •  2
  • ahmet  · 技术社区  · 7 年前

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

    <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
    

    这可能是通过压缩还是我应该创建两个单独的循环。 如果我创建两个独立的循环,而不是其他问题。

    1 回复  |  直到 7 年前
        1
  •  2
  •   willeM_ Van Onsem    7 年前

    我认为您需要对第二个查询集进行一些处理,以用分号分隔它。( ; )到子字符串中。问题是,这样结构就消失了,因此 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)
    )
    

    因此,我们在这里迭代这两个 查询集 qi1 qi2 然后我们执行 zip_longest qi1[swtype] (包装成 单子元组 因为我们需要一个不可数,我们将 淇2 到子字符串中 qi2.split(';') )那么我们 chain 子拉链 “一起。

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