在Python和Django中循环遍历列表的字典

时间:2019-02-15 22:39:10

标签: python django

我有一个查询集,返回的结果如下:

defaultdict(<type 'list'>,
    {
        123: 
            [
                {'field1': 123, 'field2': 'August', 'field3': 50},
                {'field1': 123, 'field2': 'September', 'field3': 25},
                {'field1': 123, 'field2': 'October', 'field3': 70}
            ],
        789: 
            [
                {'field1': 789, 'field2': 'August', 'field3': 80},
                {'field1': 789, 'field2': 'September', 'field3': 22},
                {'field1': 789, 'field2': 'October', 'field3': 456}
            ],
    })

我试图遍历模板中的列表,但是我只能得到要显示的键,例如:

        {% for each in results %}
            {{ each }}<br>
        {% endfor %}

返回:

123
789

我尝试遍历results.items,但没有返回任何结果。我尝试使用key, value,它也不会返回任何内容。我起初以为我可以嵌套for loop,然后遍历each

        {% for each in results %}
            {% for row in each %}
                {{ row }}
            {% endfor %}
        {% endfor %}

但是返回'int' object is not iterable

如果有人能指出我正确的方向,我不确定我缺少什么!

3 个答案:

答案 0 :(得分:2)

我还没有看到Python的这种语法。我没有和django合作。因此,我将只使用您自己的格式,并只修改一件事。您不必使用for row in each,而不必说for row in results[each]results是字典,而each是键。如果您想要该键的字典值,则需要通过results[each]来获得它。现在,您可以遍历该值(如果可迭代)。

    {% for each in results %}
        {% for row in results[each] %}
            {{ row }}
        {% endfor %}
    {% endfor %}

答案 1 :(得分:2)

实际上,您正在尝试遍历整数。

第一个for循环遍历results.keys(),这就是为什么要取回作为第一个字典中键的整数的原因。

类似的东西可以在python中工作:

for x in results:
    for y in results[x]:
        print y

或者,您可以像这样使用.items()/ .iteritems():

for k, v in results.items():
    for small_dict in v:
        print small_dict

考虑到您正在尝试在Django模板中执行此操作,我认为第一个解决方案将为您工作。

答案 2 :(得分:2)

您可以使用字典的values方法来获取每个子列表,然后可以在嵌套循环中对其进行迭代:

{% for each in results.values %}
    {% for row in each %}
        {{ row.field1 }}
        {{ row.field2 }}
        {{ row.field3 }}
    {% endfor %}
{% endfor %}