You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django嵌套双zip循环报错:需解包2个值却仅得1个,求解决方法

修复Django模板嵌套循环的解包错误

在views.py中定义了以下代码:

mylist1 = ["peru", "germany", "japan"]
mylist2 = [["lima","cusco"], ["berlin","munich"], ["tokyo"]]
mylist3 = [[1,2], [3,4], [5]]
mylist = zip(mylist1, zip(mylist2, mylist3))

在Django模板中编写了嵌套for循环:

{% for country, info in mylist %}
    {{ country }}
    {% for city, number in info %}
        {{ city }}
        {{ number }}
    {% endfor %}
{% endfor %}

运行时出现错误:Need 2 values to unpack in for loop; got 1.

错误原因

当前mylist的结构是每个元素为(国家名称, (城市列表, 数字列表)),比如第一个元素是("peru", (["lima","cusco"], [1,2]))。模板内层循环遍历info时,会依次取出["lima","cusco"]和[1,2]这两个列表,尝试将单个列表解包为city和number,但单个列表是一个整体元素,无法拆成两个值,因此触发解包错误。

修复方案

需要调整mylist的结构,让每个国家对应的info是城市与数字一一配对的可迭代对象,而非两个独立列表的元组。可以通过以下两种方式实现:

  • 使用生成器表达式嵌套zip:

    mylist = zip(mylist1, (zip(cities, numbers) for cities, numbers in zip(mylist2, mylist3)))
    
  • 使用列表推导式更直观地构建结构:

    mylist = [
        (country, zip(cities, numbers))
        for country, cities, numbers in zip(mylist1, mylist2, mylist3)
    ]
    

调整后,每个国家对应的info会是类似(("lima",1), ("cusco",2))的可迭代对象,模板中的内层循环就能正确将每个元素解包为city和number。

内容的提问来源于stack exchange,提问作者christian ortiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 22:23:16