我试图在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模板中的元素。
答案 0 :(得分:1)
它无法在单个循环中完成,但您可以通过一些嵌套来完成:
{% 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
的标记来访问时间。
答案 1 :(得分:1)
我能够通过一个循环来完成它 - 尽管我可能误解了之前的答案或最初的问题。无论如何,这可能对任何希望在Django中使用嵌套字典的人有所帮助
结合
你的示例字典不是一本字典,所以另一个例子是
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
答案 2 :(得分: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
答案 3 :(得分: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])