【问题标题】:Loop Through List of Dict of Lists in Python and Django循环遍历 Python 和 Django 中列表的字典列表
【发布时间】:2019-07-10 02:34:25
【问题描述】:

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

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

我不确定我错过了什么,如果有人能指出我正确的方向!

【问题讨论】:

    标签: python django


    【解决方案1】:

    我还没有看到 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 %}
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        第一个 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 模板中执行此操作,我认为第一个解决方案对您有用。

        【讨论】:

        • 谢谢!部分问题是我正在通过 results = defaultdict(list) 初始化 results,但在 results = {} 中使用 results.items
        猜你喜欢
        • 1970-01-01
        • 2016-08-31
        • 1970-01-01
        • 2014-06-27
        • 2015-10-30
        • 1970-01-01
        • 1970-01-01
        • 2019-03-22
        • 2021-06-11
        相关资源
        最近更新 更多