0

我正在尝试访问 Django 模板中的以下数据结构。但这对我来说太难了,也不知道怎么做。

{ Day1 : { Room1 : [(datetime.date(), (totalTime1, Flag1)),
                    (datetime.date(), (totalTime2, Flag2)),
                    (datetime.date(), (totalTime3, Flag3)),
                    (datetime.date(), (totalTime4, Flag4))],

           Room2 : [(datetime.date(), (totalTime1, Flag1)),
                    (datetime.date(), (totalTime2, Flag2)),
                    (datetime.date(), (totalTime3, Flag3)),
                    (datetime.date(), (totalTime4, Flag4))],

           Room3 : [(datetime.date(), (totalTime1, Flag1)),
                    (datetime.date(), (totalTime2, Flag2)),
                    (datetime.date(), (totalTime3, Flag3)),
                    (datetime.date(), (totalTime4, Flag4))] },

 Day2 : {  Room1 : [(datetime.date(), (totalTime1, Flag1)),
                    (datetime.date(), (totalTime2, Flag2)),
                    (datetime.date(), (totalTime3, Flag3)),
                    (datetime.date(), (totalTime4, Flag4))],

           Room2 : [(datetime.date(), (totalTime1, Flag1)),
                    (datetime.date(), (totalTime2, Flag2)),
                    (datetime.date(), (totalTime3, Flag3)),
                    (datetime.date(), (totalTime4, Flag4))],

           Room3 : [(datetime.date(), (totalTime1, Flag1)),
                    (datetime.date(), (totalTime2, Flag2)),
                    (datetime.date(), (totalTime3, Flag3)),
                    (datetime.date(), (totalTime4, Flag4))] } }

可能它是一个非常复杂的数据结构,但我很抱歉。我无法打破它。我的选择是有限的。我想在一个循环中访问每个元素。我该怎么做?

编辑:我想从 django 模板访问元素。

4

4 回答 4

5

我可以用一个循环来做到这一点——尽管我可能误解了之前的答案或最初的问题。无论如何,这可能对其他想要在 Django 中使用嵌套字典的人有所帮助

结合

  • .items() 方法循环遍历 Django 中的字典
  • 属性查找的 .value 语法

您的示例字典不是字典,因此作为另一个示例

grades_dict = {'Math': {'grade': 78, 'grade_date': '2016-05-15'},
'Reading': {'grade': 83, 'grade_date': '2016-08-16'},
'Science': {'grade': 98, 'grade_date': '2016-08-16'},
'Social Studies': {'grade': 62, 'grade_date': '2016-05-15'}}

在 django 模板 html 中

{% for key, value in grades_dict.items %}
    <p>Grade for {{key}}: {{value.grade}}. </p>
    <p>Last entered on {{value.most_recent_grade_date}}</p>
{% endfor %}

结果是

Grade for Social Studies: 62.

Last entered on 2016-05-15

Grade for Science: 98.

Last entered on 2016-08-16

Grade for Reading: 83.

Last entered on 2016-08-16

Grade for Math: 78.

Last entered on 2016-05-15
于 2016-08-23T21:40:25.690 回答
4

它不能在一个循环中完成,但你可以通过一些嵌套来完成:

{% for day, rooms in mydict.items %}
  {% for room, dates_and_flags in rooms.items %}
    {% for date, time_and_flags in dates_and_flags %}
        {{ date }}:{{ time_and_flags }}
    {% endfor %}
  {% endfor %}
{% endfor %}

因为time_and_flags是一个元组,您可以使用 访问时间time_and_flags.0和使用time_and_flags.1.

于 2013-06-13T22:45:23.523 回答
0

这是一个生成器函数,它将在循环中返回每一行:

def next_row(data):
    for day,rooms in data.iteritems():
        for room,times in rooms.iteritems():
            for time in times:
                yield (day, room, time)

像这样使用它:

for row in next_row(data):
    # do something with row
于 2013-06-13T22:24:15.590 回答
0

您的问题并没有确切说明您想对嵌套字典做什么,但这是一个疯狂的猜测:

for day,rooms in days.iteritems():
    print "Rooms for day {}:".format(day)
    for room, times in rooms.iteritems():
        print "  . Room {}".format(room)
        for t in times:
            print "Date : {} | Total time : {} | Flag : {}".format(t[0], t[1][0], t[1][1])
于 2013-06-13T22:28:53.940 回答